CREATE TABLE src_table(
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL
);
INSERT INTO src_table VALUES (1, '张三');
INSERT INTO src_table VALUES (2, '李四');
INSERT INTO src_table VALUES (3, '王五');
CREATE TABLE tgt_t1 AS
SELECT * FROM src_table WHERE FALSE;
CREATE TABLE tgt_t2 AS
SELECT * FROM src_table WHERE FALSE;
CREATE TABLE tgt_t3 AS
SELECT * FROM src_table WHERE FALSE;
-- Oracle 语法
INSERT ALL
INTO tgt_t1(id, name) VALUES(id, name)
INTO tgt_t2(id, name) VALUES(id, name)
INTO tgt_t3(id, name) VALUES(id, name)
SELECT * FROM src_table;
WITH s AS (
SELECT id, name
FROM src_table
)
,t1 AS (
INSERT INTO tgt_t1(id, name)
SELECT *
FROM s
),
t2 AS (
INSERT INTO tgt_t2(id, name)
SELECT *
FROM s
),
t3 AS (
INSERT INTO tgt_t3(id, name)
SELECT *
FROM s
)
SELECT 1;
SELECT * FROM tgt_t1;
ID|NAME |
--|------|
1|张三 |
2|李四 |
3|王五 |
SELECT * FROM tgt_t2;
ID|NAME |
--|------|
1|张三 |
2|李四 |
3|王五 |
SELECT * FROM tgt_t3;
ID|NAME |
--|------|
1|张三 |
2|李四 |
3|王五 |
-- Oracle 语法
INSERT ALL
WHEN id <= 1 THEN
INTO tgt_t1(id, name) VALUES(id, name)
WHEN id BETWEEN 1 AND 2 THEN
INTO tgt_t2(id, name) VALUES(id, name)
ELSE
INTO tgt_t3(id, name) VALUES(id, name)
SELECT * FROM src_table;
WITH s AS (
SELECT id, name
FROM src_table
)
,t1 AS (
INSERT INTO tgt_t1(id, name)
SELECT *
FROM s
WHERE id <= 1
RETURNING id
),
t2 AS (
INSERT INTO tgt_t2(id, name)
SELECT *
FROM s
WHERE id BETWEEN 1 AND 2
RETURNING id
),
t3 AS (
INSERT INTO tgt_t3(id, name)
SELECT *
FROM s
WHERE id NOT IN (SELECT id FROM t1
UNION ALL
SELECT id FROM t2)
)
SELECT 1;
INSERT FIRST
WHEN id <= 1 THEN
INTO tgt_t1(id, name) VALUES(id, name)
WHEN id BETWEEN 1 AND 2 THEN
INTO tgt_t2(id, name) VALUES(id, name)
ELSE
INTO tgt_t3(id, name) VALUES(id, name)
SELECT * FROM src_table;
WITH s AS (
SELECT id, name
FROM src_table
)
,t1 AS (
INSERT INTO tgt_t1(id, name)
SELECT *
FROM s
WHERE id <= 1
RETURNING id
),
t2 AS (
INSERT INTO tgt_t2(id, name)
SELECT *
FROM s
WHERE id BETWEEN 1 AND 2
AND id NOT IN (SELECT id FROM t1)
RETURNING id
),
t3 AS (
INSERT INTO tgt_t3(id, name)
SELECT *
FROM s
WHERE id NOT IN (SELECT id FROM t1
UNION ALL
SELECT id FROM t2)
)
SELECT 1;
原文作者:SQL编程思想;如有侵权,请联系管理员删除。