MySQL - 如何获取表A中表B中不存在的值列表?

时间:2009-07-03 14:23:11

标签: mysql

**Table A**
1
2
3
4
5
6


**Table B**
2
3
5

如何选择仅存在于表B中的条目ID?在这个例子中,我正在寻找一个返回1,4和6的查询。

3 个答案:

答案 0 :(得分:2)

尝试

select value from B where value not in (select value from A)

获取B中不在A中的值。

要获得相反的结果(A中的值不在B中),请使用

select value from A where value not in (select value from B)

答案 1 :(得分:2)

假设该列名为“id”,则:

SELECT *
FROM tableA a
WHERE NOT EXISTS (SELECT 1 FROM tableB WHERE id = a.id)

SELECT *
FROM TableA
WHERE id NOT IN (SELECT id FROM tableB)

您可能需要测试以查看哪种效果最佳。 MySQL可能有点不可预测。

答案 2 :(得分:0)

这可以避免IN +子查询:

SELECT A.value FROM A
LEFT OUTER JOIN B ON (A.value = B.value)
WHERE B.value IS NULL

因为对表A中的每个找到的行执行了IN (subquery) isn't optimized