2011-03-13 98 views
6

我有两张桌子,一张有两列的桌子:IP和ID,桌子B有列:ID和额外信息。我想提取表B中的行,不在表A的IP所以,如果我有表A中的行与MySQL的加入和排除?

id = 1 
ip = 000.000.00 
id = 2 
ip = 111.111.11 

和我行表B中

id = 1 
id = 2 

然后,如果ip = 111.111.11,我怎样才能返回表B中的第1行?

+0

将您接受的答案更改为Marc的答案。 – Pacerier 2015-04-10 13:46:35

回答

8
SELECT * FROM `B` WHERE `ID` NOT IN (SELECT `ID` FROM `A`) 
21
select b.id, b.* 
from b 
left join a on a.id = b.id 
where a.id is null 

这将会把所有在B中有A.没有匹配行的行您可以添加特定的IP到WHERE子句,如果你想尝试只是一个IP地址。

+0

为什么b.id和b。*在同一时间 - 太有野心 – bensiu 2011-03-13 03:46:45

+2

因为OP表示表中还有其他字段,但没有指定它们。所以我特别选择了他在问题中包含的领域,并且在'*'中加入了他并不是 – 2011-03-13 03:47:37

+1

这样显而易见的领域,然而我却无法自己想出这个领域,谢谢吨! – 2013-07-05 12:46:09