首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >INSERTion时,仅对列使用SQL减号/ for命令模拟

INSERTion时,仅对列使用SQL减号/ for命令模拟
EN

Stack Overflow用户
提问于 2019-10-09 08:54:59
回答 2查看 43关注 0票数 0

除了命令或代码之外,是否只有列存在模拟量?既然减号/除命令对行很好,那么列呢?

掩码表(实际存在):

代码语言:javascript
复制
id       col1 col2 col3 col4 ... colN comment
doesn't   A    B    C    D   ...  Z   --alphabet correct sequence
matter

列数据类型的coli是相等的。

传入select流(不是物理表,但由于其他表的复杂连接而表示为表):

代码语言:javascript
复制
 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

在处理掩码表以选择-stream作为插入结果后,对物理表的预期输出:

代码语言:javascript
复制
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-逻辑/命令所需。类似的减/除,但列(不同?)如果传入的select流是其他复杂的连接-select()的结果

这个任务的SQL代码是什么?求你了,建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 10:08:53

另一种不用案例陈述的方法:

设置

代码语言:javascript
复制
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');

查询

代码语言:javascript
复制
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;

结果

代码语言:javascript
复制
| col1 | col2 | col3 | col4 | col5 |
| ---- | ---- | ---- | ---- | ---- |
| null | null | null | null | null |
| null | C    | B    | null | null |
| E    | null | null | M    | null |

关于DB Fiddle的看法

票数 1
EN

Stack Overflow用户

发布于 2019-10-09 10:06:03

我看不出到像EXCEPT这样的set操作的连接是什么。

不管怎么说,你可以这么做:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58300436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档