使用唯一值从一个表插入另一个表

时间:2015-11-29 22:45:34

标签: mysql sql insert unique

我有一个查询来更新表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更新新记录?

2 个答案:

答案 0 :(得分: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

修改

您可以使用MySQL INSERT 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

答案 1 :(得分:0)

如果您的任何列具有唯一值(例如,列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中不存在。