【问题标题】:SQL: How can I add to a table without some duplicates?SQL:如何在没有重复的情况下添加到表中?
【发布时间】:2016-05-24 09:50:56
【问题描述】:

因此,我目前正在尝试将一张桌子添加到另一张桌子中,但由于某种原因,它没有按照我想要的方式工作。 两个表中都有三列,如果表 2 的前 2 列不在表 1 中,我只想将表 2 中的每一行数据添加到表 1(我不关心第 3 列)

这是我目前所拥有的:

INSERT INTO table1 (col1, col2, col3)
    SELECT a.col1, a.col2, a.col3 
    FROM table2 as a
    WHERE NOT EXISTS (SELECT b.col1, b.col2 
                      FROM table1 as b
                      WHERE a.col1 = b.col1 AND a.col2 = b.col2);

我检查了一下,这似乎应该可以工作,但它不是,但任何人都知道为什么吗?

【问题讨论】:

  • 这个语法是正确的——它有时被称为反连接。这实际上是做你正在尝试的事情的首选方式。我唯一要补充的是,选择中“不存在”中的列是不必要的。使用半连接或反连接,为简单起见,您可以“选择 1”或“选择空”。也就是说,你所做的并没有错。您能否解释错误并在两个表的数据之前/之后显示一些示例。 你所做的应该有效
  • @spaceboound 这个查询是正确的。您可能会在其他地方出错。如果您可以将屏幕截图放在您得到的错误消息或输出中会更好。

标签: sql sqlite insert duplicates


【解决方案1】:

当有两个字段要搜索时,我经常遇到麻烦。一种方法是将它们组合在一起:

INSERT INTO table1 (col1, col2, col3)
     SELECT a.col1, a.col2, a.col3 from table2 as a
     WHERE concat(a.col1,':', a.col2) 
     NOT IN (SELECT concat(col1,':',col2) from table1);

另一种方式是左连接:

INSERT INTO table1 (col1, col2, col3)
     SELECT a.col1, a.col2, a.col3 
     from table2 as a
     LEFT OUTER JOIN table1 as b
     ON a.col1 = b.col1
     AND a.col2 = b.col2
     WHERE b.col1 IS NULL AND b.col2 IS NULL;

例如2,最好在where子句中使用主键。

【讨论】:

    【解决方案2】:

    试试这个:

    merge into tab2 a
    using
    (select col1,col2,col3 from tabl1) b
    on
    (b.col1=a.col1 and b.col2=a.col2)
    when not matched then
    insert (a.col1,a.col2,a.col3)
    values
    (b.col1,b.col2,b.col3);
    

    【讨论】:

      【解决方案3】:

      试试这个:

      INSERT INTO table1 (col1, col2, col3)
      (SELECT a.col1, a.col2, a.col3 
      FROM table2 a
      WHERE NOT EXISTS (SELECT b.col1, b.col2 
                        FROM table1 b
                        WHERE a.col1 = b.col1 AND a.col2 = b.col2));
      

      我猜表名是不需要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        • 2019-08-27
        • 2016-06-02
        • 2023-04-07
        • 2019-03-01
        • 2017-03-27
        相关资源
        最近更新 更多