[MySQL 5.5]
我有两张表 - Table_1
和Table_2
。
它们具有相同的列 - Col1, Col2, Col3, Col4
。
Table_1
可以在列Col1
和Col2
上有重复项。
实施例1:
Col1,Col2,Col3,Col4
1) a ,b ,c ,1
2) a ,b ,d ,2
现在Table_2有以下几行:
例2:
Col1,Col2,Col3,Col4
1) a ,b ,e ,1
2) a ,c ,f ,2
我想将Table_2
中的所有行写入Table_1
Col1
和Col2
没有重复的行。在上面的例子中,插入应该忽略上面Example-2中的第1行并添加第2行,因为Table_1
中的组合(a,c)没有重复。
在Col1
和Col2
上添加唯一键无效,因为它会删除示例1中的第2行。
Table_1
和Table_2
各有200万行。嵌套的select
语句(我尝试过)在执行时间方面拼写了灾难。
还有另一种出路吗?
答案 0 :(得分:1)
这应该做:
INSERT INTO Table_1
SELECT *
FROM Table_2 A
WHERE NOT EXISTS(SELECT 1 FROM Table_1
WHERE Col1 = A.Col1
AND Col2 = A.Col2)
答案 1 :(得分:0)
insert into table1
select *
from table2
where concat(Col1,Col2) not in
(
select concat(col1,col2)
from table1
) as T
答案 2 :(得分:0)
见下文。它使用join会有更好的性能。
INSERT INTO Table_1
SELECT T2.Col1
,T2.Col2
,T2.Col3
,T2.Col4
FROM Table_2 T2
LEFT JOIN Table_1 T1
ON T2.Col1 = T1.Col1
AND T2.Col2 = T1.Col2
WHERE T1.Col1 IS NULL
AND T1.Col2 IS NULL
答案 3 :(得分:0)
通过LEFT JOIN和WHERE子句中的NULL检查找到不存在的行
INSERT INTO Table_1 (Col1, Col2, Col3, Col4)
SELECT Table_2.Col1, Table_2.Col2, Table_2.Col3, Table_2.Col4
FROM Table_2
LEFT JOIN Table_1
ON Table_2.Col1 = Table_1.Col1
AND Table_2.Col2 = Table_1.Col2
WHERE Table_2.Col1 IS NULL;