MINUS / EXCEPT命令或代码替代方法仅适用于列吗?由于MINUS / EXCEPT命令适用于行,因此适用于列?
掩码表(已存在):
id col1 col2 col3 col4 ... colN comment
doesn't A B C D ... Z --alphabet correct sequence
matter
col [i]的列数据类型彼此相等。
传入选择流(不是物理表,而是由于从其他表进行其他复杂的联合选择而表示为表):
col1 col2 col3 col4 ... colN comment
A B C D ... Z --alphabet correct seq
A C B D ... Z --incorrect
E B C M ... Z --incorrect
...
Z Y X W ... A --full inverse icorrect
将mask-table处理为select-stream作为插入结果后,预期输出到物理表:
id col1 col2 col3 col4 ... colN
(auto-
gnrtd)
(null)(null)(null)(null)...(null)
(null) C B (null)...(null)
E (null)(null) M ...(null)
...
Z Y X W ... A
请注意:字母仅作为示例。这里不是问题。需要SQL-Logic /命令。类似于MINUS / EXCEPT,但用于列(DISTINCT?如何,如果输入的选择流是其他复杂的联合选择的结果,怎么办)
此任务的SQL代码是什么?请提出建议。
答案 0 :(得分:1)
没有CASE语句的另一种方法:
设置
CREATE TABLE mask (
col1 TEXT,
col2 TEXT,
col3 TEXT,
col4 TEXT,
col5 TEXT
);
INSERT INTO mask SELECT 'A', 'B', 'C', 'D', 'E';
CREATE TABLE your_stream (
col1 TEXT,
col2 TEXT,
col3 TEXT,
col4 TEXT,
col5 TEXT
);
INSERT INTO your_stream
VALUES
('A', 'B', 'C', 'D', 'E'),
('A', 'C', 'B', 'D', 'E'),
('E', 'B', 'C', 'M', 'E');
查询
SELECT
NULLIF(s.col1, m.col1) AS col1,
NULLIF(s.col2, m.col2) AS col2,
NULLIF(s.col3, m.col3) AS col3,
NULLIF(s.col4, m.col4) AS col4,
NULLIF(s.col5, m.col5) AS col5
FROM your_stream s
CROSS JOIN mask m;
结果
| col1 | col2 | col3 | col4 | col5 |
| ---- | ---- | ---- | ---- | ---- |
| null | null | null | null | null |
| null | C | B | null | null |
| E | null | null | M | null |
答案 1 :(得分:0)
我看不到与EXCEPT
之类的设置操作的连接。
无论如何,这是您可以继续的方式:
INSERT INTO destination (col1, col2, col3, ...)
SELECT CASE WHEN incoming_col1 <> mask.col1
THEN incoming_col1
END,
CASE WHEN incoming_col2 <> mask.col2
THEN incoming_col2
END,
...
FROM mask;