第一次运行插入查询由于 E 列而出现重复,并且在运行超过一次时不应插入重复记录

Posted

技术标签:

【中文标题】第一次运行插入查询由于 E 列而出现重复,并且在运行超过一次时不应插入重复记录【英文标题】:Running insert query for the first time getting duplicates due to E column and shouldn't insert duplicate records when you run for more than one time 【发布时间】:2021-01-27 11:37:24 【问题描述】:

[根据D列的值,找出D列值与同一张表的A列值的匹配。如果匹配存在,则插入整个匹配行的附加行,但在 C 列中具有负值....我还在注释中添加了我的代码..我被困在两者之间..这是我使用的查询

CREATE TABLE TABLE1 (A char, B char, C integer, D char, E integer);

INSERT INTO TABLE1 VALUES('a', 'b', 10, 'c', 1);
INSERT INTO TABLE1 VALUES('a', 'b', 10, 'c', 2);
INSERT INTO TABLE1 VALUES('c', 'd', 20, ' ', 1);
INSERT INTO TABLE1 VALUES('c', 'd', 20, ' ', 2);
INSERT INTO TABLE1 VALUES('w', 'y', 40, 'j', 1);
INSERT INTO TABLE1 VALUES('j', 'z', 50, ' ', 1);


   INSERT INTO TABLE1 
   SELECT A ,B, -1 *C , D, E
   FROM 
    ( SELECT T1.A, T1.B, T1.C, T1.D, T1.E
      FROM TABLE1 T1 
      INNER JOIN TABLE1 T2 ON T1.A = T2.D
    ) T
   WHERE NOT EXISTS
              ( SELECT 1 FROM TABLE1 TT
                WHERE T.A = TT.A
                AND TT.C = -1 * T.C
             );

如果我第一次运行相同的插入查询,它会填充行 (c, d, -20, 1) 两次和 (c, d, -20, 2) 行的重复记录。实际上我只需要一次..这是由于 E 列的原因,我觉得如此,当您第二次运行相同的查询时,它不应该插入重复的记录/..如何删除同一个表中的重复记录,例如如果下次运行相同的插入查询,则不应插入已存在的记录]1

【问题讨论】:

为您的表(或创建在线小提琴)提供 CREATE TABLE + INSERT INTO 以重现问题。删除错误的 DBMS 标签。 有人能帮我在这个查询中得到预期的结果吗 【参考方案1】:

只需使用NOT EXISTS 中的所有列,如下所示:

   INSERT INTO TABLE1 
   SELECT DISTINCT A ,B, -1 *C , D, E
   FROM 
    ( SELECT T1.A, T1.B, T1.C, T1.D, T1.E
      FROM TABLE1 T1 
      INNER JOIN TABLE1 T2 ON T1.A = T2.D
    ) T
   WHERE NOT EXISTS
              ( SELECT 1 FROM TABLE1 TT
                WHERE T.A = TT.A AND T.B = TT.B AND T.D = TT.D AND AND T.E = TT.E
                AND TT.C = -1 * T.C
             );

db<>fiddle

【讨论】:

我仍然收到重复记录...你能再检查一次吗?实际上需要插入 3 条额外的记录,但是根据您的查询,它插入了 5 条记录...对于其他记录,请查看我的图片(以粗体字符突出显示) 好的,您需要在答案中更新并共享 DBFIDDLE

以上是关于第一次运行插入查询由于 E 列而出现重复,并且在运行超过一次时不应插入重复记录的主要内容,如果未能解决你的问题,请参考以下文章

由于“重复项目”而将空行插入表中

SQL 从多个表中选择列而不重复数据

使用导致问题的视图联合插入表

添加列而不添加 GROUP BY,而不是嵌套查询

同时触发javascript和sql查询[重复]

是否可以在 Redshift 中并行运行查询?