将Table1中的值添加到Table2中,而不添加重复项

时间:2013-12-20 18:51:08

标签: mysql sql

[MySQL 5.5]

我有两张表 - Table_1Table_2

它们具有相同的列 - Col1, Col2, Col3, Col4

Table_1可以在列Col1Col2上有重复项。

实施例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 Col1Col2没有重复的行。在上面的例子中,插入应该忽略上面Example-2中的第1行并添加第2行,因为Table_1中的组合(a,c)没有重复。

Col1Col2上添加唯一键无效,因为它会删除示例1中的第2行。

Table_1Table_2各有200万行。嵌套的select语句(我尝试过)在执行时间方面拼写了灾难。

还有另一种出路吗?

4 个答案:

答案 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;