减号/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
处理掩码表以选择流作为插入结果后,预期输出到物理表:
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/命令。减号/除外的类似物,但对于列(不同?如何,如果传入的选择流是其他复杂联接选择的结果(
此任务的 SQL 代码是什么?请指教。
另一种没有 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 |
在DB Fiddle上查看
我看不出与像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;