私は2つのテーブルを持っています。テーブル 1 の列がテーブル 2 の列に重複していないかどうかを確認したい。
重複が見つからない場合は、table1 から行名を取得したいと考えています。
私は2つのテーブルを持っています。テーブル 1 の列がテーブル 2 の列に重複していないかどうかを確認したい。
重複が見つからない場合は、table1 から行名を取得したいと考えています。
私があなたを正しく理解したなら、これはあなたが望むものです。
SELECT
t1.name
FROM
Table1 t1
WHERE
t1.name
NOT IN
(
SELECT t2.name
FROM Table2 t2
JOIN t1
ON t2.name = t1.name
)
行が「重複」しているかどうかを判断するために、行を「照合」するために使用する列を指定する必要があります。
列名はid
.
通常、「結合防止」パターンが最適なオプションです。
SELECT a.id
FROM table1 a
LEFT
JOIN table2 b
ON a.id = b.id
WHERE b.id IS NULL
(パフォーマンスはさまざまな要因に依存します。)
他のオプションは、NOT EXISTS 述語を使用することです。
SELECT a.id
FROM table1 a
WHERE NOT EXISTS
( SELECT 1
FROM table2 b
WHERE b.id = a.id
)
または、NOT IN 述語を使用します。
SELECT a.id
FROM table1 a
WHERE a.id NOT IN
( SELECT b.id
FROM table2 b
WHERE b.id IS NOT NULL
)
これらの各ステートメントの生成された実行計画とパフォーマンスは異なる可能性があります。大規模なセットでは、通常、「アンチ結合」パターン (最初のクエリ) が最適に機能します。