INSERT SELECT와 함께 재귀 CTE를 사용하여 Maria와 함께 테이블 데이터 생성DB
Windows 7에서 Maria DB 버전 10.2.9를 사용하고 있습니다.
MariaDB > select @@version;
+----------------+
| @@version |
+----------------+
| 10.2.9-MariaDB |
+----------------+
INSERT SELECT와 함께 재귀 CTE를 사용하여 테스트 데이터를 생성하려고 합니다.단순화를 위해 아래 단일 열 테이블을 채웁니다.
CREATE TABLE cte_populated
(
id INT NOT NULL PRIMARY KEY
)
ENGINE = InnoDB;
값 1 ~ 10을 생성하는 CTE:
WITH RECURSIVE int_seq AS (
SELECT 1 AS val
UNION ALL
SELECT val + 1
FROM int_seq
WHERE val < 10
)
INSERT cte_populated(id)
SELECT int_seq.val FROM int_seq;
위의 경우 구문 오류가 발생합니다.삽입 행을 삭제하면 SELECT 문에서 10 행이 예상대로 값 1 ~10으로 표시됩니다.
INSERT/SELECT 쿼리에서의 CTE 사용에 관한 제한사항이나 회피책을 알고 있는 사람이 있습니까?
Update : 다음 2개의 쿼리가 동작합니다.하나는 @elenst 응답에서, 다른 하나는 @PM 77 코멘트로 링크를 제공했습니다.
INSERT cte_populated(id)
WITH RECURSIVE int_seq AS (
SELECT 1 AS val
UNION ALL
SELECT val + 1
FROM int_seq
WHERE val < 10)
SELECT int_seq.val as id FROM int_seq;
다음은 @PM 77에 의해 제공되는 링크에서 각색한 것입니다.
INSERT INTO cte_populated
WITH RECURSIVE int_seq(val) AS (
SELECT 1
UNION ALL
SELECT 1 + val FROM int_seq WHERE val < 10)
SELECT * FROM int_seq;
여기에서는 제한이 없습니다.구문에 따라 반대 방향으로 진행하면 됩니다.
INSERT cte_populated(id)
WITH RECURSIVE int_seq AS (
SELECT 1 AS val
UNION ALL
SELECT val + 1
FROM int_seq
WHERE val < 10
)
SELECT int_seq.val FROM int_seq;
업데이트: 여전히 오류가 발생한다는 주장에 응답하고 실제 클라이언트 출력을 추가합니다.
MariaDB [test]> CREATE TABLE `cte_populated` (
-> `id` int(11) DEFAULT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.21 sec)
MariaDB [test]> INSERT cte_populated(id)
-> WITH RECURSIVE int_seq AS (
-> SELECT 1 AS val
-> UNION ALL
-> SELECT val + 1
-> FROM int_seq
-> WHERE val < 10)
-> SELECT int_seq.val as id FROM int_seq;
Query OK, 10 rows affected (0.04 sec)
Records: 10 Duplicates: 0 Warnings: 0
MariaDB [test]> SELECT * FROM cte_populated;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
10 rows in set (0.00 sec)
MariaDB [test]> select @@version;
+----------------+
| @@version |
+----------------+
| 10.2.9-MariaDB |
+----------------+
1 row in set (0.00 sec)
언급URL : https://stackoverflow.com/questions/48511376/using-recursive-cte-with-insert-select-to-generate-table-data-with-mariadb
'source' 카테고리의 다른 글
openssl_encrypt에서의 초기화 벡터 사용 (0) | 2022.10.14 |
---|---|
N 이하의 모든 소수를 나열하는 가장 빠른 방법 (0) | 2022.10.14 |
데몬 프로세스로 php 스크립트 실행 (0) | 2022.10.14 |
각 열에 대해 가장 일반적인 값을 가져옵니다. (0) | 2022.10.14 |
Galera 클러스터는 노드 중 하나를 정기적으로 비동기화하고 재동기화합니다. (0) | 2022.10.14 |