我如何看待MySQL中两个表之间的区别?

时间:2013-10-21 19:24:32

标签: mysql sql

我有两张桌子。表AB。每个表都有一个barcode列。

我可以在条形码字段中加入这两个。我想要做的是找出表A中哪些条形码不与B联接。

例如:

A有:

001
002
003

B有:

001
003

我需要一个能够撤回002的查询。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

这称为反连接,在MySQL中有三个选项。在一些模糊的偏好顺序(最多或最少):

  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
           )
    
  4. 请参阅@ Quassnoi的博客文章NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: MySQL,以便对各自的表现进行比较分析。