0

私は2つのテーブルを持っています。テーブル 1 の列がテーブル 2 の列に重複していないかどうかを確認したい。

これが検索の仕組みです。重複行の検索

重複が見つからない場合は、table1 から行名を取得したいと考えています。

4

2 に答える 2

2

私があなたを正しく理解したなら、これはあなたが望むものです。

SELECT 
    t1.name 
FROM 
    Table1 t1 
WHERE 
    t1.name 
NOT IN 
    (
        SELECT t2.name 
        FROM Table2 t2
        JOIN t1 
        ON t2.name = t1.name
    )
于 2012-12-17T18:07:40.240 に答える
1

行が「重複」しているかどうかを判断するために、行を「照合」するために使用する列を指定する必要があります。

列名は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
       )

これらの各ステートメントの生成された実行計画とパフォーマンスは異なる可能性があります。大規模なセットでは、通常、「アンチ結合」パターン (最初のクエリ) が最適に機能します。

于 2012-12-17T19:54:22.033 に答える