插入表选择不存在影响0行的位置

时间:2013-07-19 22:05:33

标签: mysql sql sql-server

我正在尝试使用以下语法插入表中:

INSERT INTO table1(
col1, col2, col3)
SELECT distinct
col1, col2, getDate()
FROM table2 WHERE NOT EXISTS(
    SELECT 1 FROM table1, table2
    WHERE ((table1.col1 = table2.col1) or (table1.col1 is null and table2.col1 is null))
    AND ((table1.col2 = table2.col2) or (table1.col2 is null and table2.col2 is null)))

但是当我运行查询时,它会显示(0行受影响)。

NOT EXISTS语句中的SELECT语句返回我不想插入的正确行数。如果我尝试在没有WHERE NOT EXISTS语句的情况下插入表中,它会插入所有内容。我只想插入不在table1中的行。

2 个答案:

答案 0 :(得分:1)

试试这个:

INSERT INTO table1(col1, col2, col3)
SELECT distinct col1, col2, getDate()
FROM table2 WHERE NOT EXISTS(
    SELECT 1 FROM table1
    WHERE ((table1.col1 = table2.col1) or (table1.col1 is null and table2.col1 is null))
    AND ((table1.col2 = table2.col2) or (table1.col2 is null and table2.col2 is null)))

答案 1 :(得分:0)

您可以稍微优化此查询,但作为快速修复,您可以更改:

SELECT 1 FROM table1, table2

为:

SELECT 1 FROM table1

这会将外部table2绑定到子查询中。