Mysql 使用唯一值从一个表插入到另一个表
我有一个从表2更新表1的查询Mysql 使用唯一值从一个表插入到另一个表,mysql,sql,insert,unique,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列定义的重复项 我想,如果我在表2中使用列a、列B、列C创建一个唯一的索引,它将不会添加新记录,除非它们不存在于这三列中,但我得到的只是一个错误 键“U
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列定义的重复项
我想,如果我在表2中使用列a、列B、列C创建一个唯一的索引,它将不会添加新记录,除非它们不存在于这三列中,但我得到的只是一个错误
键“Unique”的“A列-B列-C列”存在重复条目
是否仍要设置此选项,以便仅从cron更新新记录?您可以使用
左连接
并根据您的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;
我假设ColumnA-C
是复合主键
编辑:
您可以使用MySQL:
如果需要使用较新的值更新其余列,可以使用:
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);
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
);
还有(速度较慢,将删除旧记录并插入新记录):
如果您的任何列具有唯一值(例如,A列是您的主键),您可以使用:
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);
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
);
此语句将在表1中插入具有表2第A列值的条目,这些值在表1第A列中不存在。再次考虑此项吗?@草莓
关于重复密钥更新…
?忽略我see@Strawberry但是有一个很好的网站。学习新东西:)