0

私は2つのテーブルを持っています。表AB. 各テーブルにはbarcode列があります。

この 2 つをバーコード フィールドで結合できます。私がやりたいのは、テーブル A のどのバーコードが B と結合していないかを調べることです。

例えば:

A には次のものがあります。

001
002
003

Bは:

001
003

002 を戻すクエリが必要です。

それ、どうやったら出来るの?

4

1 に答える 1

3

これはアンチ結合として知られており、MySQL には 3 つのオプションがあります。漠然とした好みの順序で(最も多いものから最も少ないものへ):

  1. OUTER JOINIS NULL:

    SELECT A.barcode
    FROM   A LEFT JOIN B USING (barcode)
    WHERE  B.barcode IS NULL
    
  2. NOT IN:

    SELECT barcode
    FROM   A
    WHERE  barcode NOT IN (
             SELECT barcode
             FROM   B
           )
    
  3. NOT EXISTS:

    SELECT barcode
    FROM   A
    WHERE  NOT EXISTS (
             SELECT *
             FROM   B
             WHERE  B.barcode = A.barcode
           )
    

それぞれのパフォーマンスの比較分析については、@Quassnoi のブログ記事NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: MySQLを参照してください。

于 2013-10-21T19:27:23.167 に答える