【问题标题】:Insert from one table to another with unique vales使用唯一值从一个表插入到另一个表
【发布时间】:2015-11-29 22:45:33
【问题描述】:

我有一个查询要从表 2 更新表 1

Insert into Table1 (Column A, Column B, Column C,Column D)
Select Column A, Column B, Column C, Column D from Table 2

我想运行这是一个 cron,以便在将新记录添加到表 1 时更新表 2。但是我不希望列 A-C 定义的重复项。

我想如果我使用 A 列、B 列、C 列在表 2 中创建唯一索引,它根本不会添加新记录,除非它们在这三列中不存在,但我得到的只是一个错误

对于键“唯一”,存在重复条目“A 列-B 列-C 列”

是否有任何设置,以便仅从 cron 更新新记录?

【问题讨论】:

    标签: mysql sql insert unique


    【解决方案1】:

    您可以使用LEFT JOIN 并根据您的 3 列仅插入表 1 中不存在的记录:

    INSERT INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)  
    SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD 
    FROM Table2 t2
    LEFT JOIN Table1 t1
      ON t1.ColumnA = t2.ColumnA
     AND t1.ColumnB = t2.ColumnB
     AND t1.ColumnC = t2.ColumnC
    WHERE t1.ColumnA IS NULL;
    

    SqlFiddleDemo

    我假设ColumnA-C 是复合PRIMARY KEY

    编辑:

    你可以使用MySQLINSERT IGNORE:

    INSERT IGNORE INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)  
    SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD 
    FROM Table2 t2;
    

    SqlFiddleDemo2

    如果您需要使用更新的值更新其余列,您可以使用:

    INSERT INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)  
    SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD 
    FROM Table2 t2
    ON DUPLICATE KEY UPDATE ColumnD = VALUES(ColumnD);
    

    SqlFiddleDemo3

    还有REPLACE INTO(比较慢,会删除旧记录+插入新记录):

    REPLACE INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)  
    SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD 
    FROM Table2 t2
    

    SqlFiddleDemo4

    【讨论】:

    • 又想太多了?
    • @Strawberry ON DUPLICATE KEY UPDATE ...?忽略我看到
    • @Strawberry 但是它有很好的网站。学习新东西:)
    【解决方案2】:

    如果您的任何列具有唯一值(例如 A 列是您的 PRIMARY KEY),您可以使用:

    INSERT INTO table1 (Column_A, Column_B, Column_C, Column_D)
    SELECT Column_A, Column_B, Column_C, Column_D 
    FROM table2 
    WHERE column_A NOT IN (
      SELECT column_A FROM table1
    );
    

    此语句将插入 table1 的条目,其中 table2 的 Column_A 的值在 table1 的 Column_A 中不存在。

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2021-04-25
      相关资源
      最近更新 更多