**Table A**
1
2
3
4
5
6
**Table B**
2
3
5
如何选择仅在表B中存在的条目ID?在这个例子中,我在寻找返回1,4查询和6MySQL - 如何获取表B中不存在的值的列表?
**Table A**
1
2
3
4
5
6
**Table B**
2
3
5
如何选择仅在表B中存在的条目ID?在这个例子中,我在寻找返回1,4查询和6MySQL - 如何获取表B中不存在的值的列表?
假设列被命名为 '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可能有点不可预测。
尝试
select value from B where value not in (select value from A)
获得B中不在A.值
要获得相反(在未在B值)使用
select value from A where value not in (select value from B)
我会很好奇,看看这是如何执行克莱图提供的答案。我最初的想法是回答他写的内容,但这不会更快吗?嗯。 – 2009-07-03 14:28:18
如果表B可以包含NULL值,那么NOT IN是一个危险的工具,请参阅http://stackoverflow.com/questions/129077/sql-not-in-constraint-and-null-values考虑使用NOT EXISTS。 – Andomar 2009-07-03 14:40:44
这避免了IN
+子查询:
SELECT A.value FROM A
LEFT OUTER JOIN B ON (A.value = B.value)
WHERE B.value IS NULL
因为IN (subquery)
isn't optimized,因为它是在表中每发现行A
什么是这些值来执行? IDS?提供表格结构实际上会让我们更容易 – 2009-07-03 14:28:32
对不起,是的,他们是ID。我原本提供了更多的信息,但后来我认为我只会减少相关的位数。显然我削得太过分了。 – Eileen 2009-07-03 14:34:29