2009-07-03 56 views
0
**Table A** 
1 
2 
3 
4 
5 
6 


**Table B** 
2 
3 
5 

如何选择仅在表B中存在的条目ID?在这个例子中,我在寻找返回1,4查询和6MySQL - 如何获取表B中不存在的值的列表?

+0

什么是这些值来执行? IDS?提供表格结构实际上会让我们更容易 – 2009-07-03 14:28:32

+0

对不起,是的,他们是ID。我原本提供了更多的信息,但后来我认为我只会减少相关的位数。显然我削得太过分了。 – Eileen 2009-07-03 14:34:29

回答

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

尝试

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) 
+0

我会很好奇,看看这是如何执行克莱图提供的答案。我最初的想法是回答他写的内容,但这不会更快吗?嗯。 – 2009-07-03 14:28:18

+0

如果表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

0

这避免了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

相关问题