【问题标题】:INSERT INTO WHERE NOT IN or NOT EXIST where table origin has duplicatesINSERT INTO WHERE NOT IN 或 NOT EXIST 表源有重复项
【发布时间】:2017-11-03 03:52:06
【问题描述】:

我在尝试插入不希望重复的记录时遇到问题。这个问题与我在谷歌找到的任何解决方案都不同,所以这里是:

我有 TABLE1 和 TABLE2,我想将 TABLE1 中的记录插入到 TABLE2 中,所以我使用这个查询:

INSERT INTO table1
SELECT *
FROM table2
WHERE table2.importId NOT IN 
(
    SELECT importId 
    FROM table1 
);

仅当 TABLE2 保证不包含重复的 importId 时才有效。 因此,如果 TABLE2 具有重复的 importId 并且我想插入不包含来自 TABLE2 的 importId 的 TABLE1。上面的脚本将持续插入记录,从而在 TABLE1 中创建重复的 importId。

我已经试过了:

INSERT INTO table1
SELECT *
FROM table2
WHERE NOT EXIST 
(
    SELECT importId 
    FROM table1
    WHERE table1.importId <> table2.importId
);

出现同样的结果!现在我不得不编写另一个查询来删除重复项。那么有没有办法解决这个问题呢?

顺便说一句,我在 phpmyadmin 中使用 MYSQL。

【问题讨论】:

    标签: php mysql phpmyadmin


    【解决方案1】:

    您需要为此使用 DISTINCT 关键字,请参阅。 https://www.w3schools.com/sql/sql_distinct.asp

    INSERT INTO table1
    SELECT DISTINCT *
    FROM table2
    WHERE table2.importId NOT IN 
    (
        SELECT importId 
        FROM table1 
    );
    

    应该是你想要的,但如果你不需要在一个列中重复,我认为 GROUP BY 关键字会起作用。也许是这样的

    INSERT INTO table1
    SELECT *
    FROM table2
    WHERE table2.importId NOT IN 
    (
        SELECT importId 
        FROM table1 
    ) GROUP BY (table2.importId);
    

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多