可以缩短SQL查询吗?

时间:2019-12-25 21:37:40

标签: mysql sql

我有一个SQL查询。

INSERT INTO `t1`(col1, col2)
SELECT * FROM `t2`

WHERE NOT EXISTS (
    SELECT*FROM `t1`

    WHERE (
        t1.col1 = t2.col1
    AND
        t1.col2 = t2.col2 )
 );

此查询比较两个现有表“ t1”和“ t2”。 将表“ t2”中的数据插入表“ t1”中,两个表之间没有重复记录。 如何截断此SQL查询?可以用其他方式写吗?更轻松?

2 个答案:

答案 0 :(得分:2)

是的,相关的suqbuery可以改写为LEFT JOIN

INSERT INTO t1 -- I suggest to explicitly list all columns
SELECT t2.*
FROM t2
LEFT JOIN t1   -- USING (col1, col2) -- instead of ON clause
  ON t1.col1 = t2.col1
 AND t1.col2 = t2.col2 
WHERE t1.col1 IS NULL;

相关:Blind insert

答案 1 :(得分:2)

如果(col1,col2)是t1中的唯一键,则只需

insert ignore into t1 select * from t2;