-1

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

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 中的行。

4

2 回答 2

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)))
于 2013-07-19T22:13:16.580 回答
0

您可以对该查询进行相当多的优化,但作为快速修复,您可以更改:

SELECT 1 FROM table1, table2

到:

SELECT 1 FROM table1

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

于 2013-07-19T22:12:58.123 回答