我有两张桌子。表A
和B
。每个表都有一个barcode
列。
我可以在条形码字段中加入这两个。我想要做的是找出表A中哪些条形码不与B联接。
例如:
A有:
001 002 003
B有:
001 003
我需要一个能够撤回002的查询。
我该怎么做?
答案 0 :(得分:3)
这称为反连接,在MySQL中有三个选项。在一些模糊的偏好顺序(最多或最少):
OUTER JOIN
和IS NULL
:
SELECT A.barcode
FROM A LEFT JOIN B USING (barcode)
WHERE B.barcode IS NULL
NOT IN
:
SELECT barcode
FROM A
WHERE barcode NOT IN (
SELECT barcode
FROM B
)
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,以便对各自的表现进行比较分析。