-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 に答える