2011-12-30 62 views
1

我有两个表TableA的,tableB的
其中两关口 “IP”,像这样...

表A-IP
1.1.1.1
1.1.1.2
1.1.1.3
1.1 .1.4
1.1.1.5
1.1.1.6
1.1.1.7
1.1.1.8

表B-IP
1.1 1.3
1.1.1.4
1.1.1.5
如何从两个表中选择许多不同的数据“s”?

而且我要的是
1.1.1.1
1.1.1.2
1.1.1.6
1.1.1.7
1.1.1.8

如何选择它?

+0

你尝试过什么到目前为止,好吗? (提示:其中一个不在或不存在或为左连接) – gbn 2011-12-30 06:02:07

+0

您是否试图从两个表中获得结果?如果是这样你需要清理最后一位,所有这些结果都来自tableA-ip。 – quickshiftin 2011-12-30 06:02:16

+0

使用NOT IN语法(请参阅我的回答) – SlavaNov 2011-12-30 06:05:55

回答

3

它看起来像你想的差集(即IP地址在一个不属于也在B),soooooo:

SELECT a.ip FROM tableA a WHERE tableA.ip NOT IN (SELECT b.ip FROM tableB) 
-1

您可以将两个结果集与UNION结合使用。

select ip from tableA 
union 
select ip from tableB; 

http://dev.mysql.com/doc/refman/5.0/en/union.html

默认行为是去掉重复的行。 如果你想重复行使用UNION ALL。

+0

我认为OP实际上需要设置的差异,而不是设置的联合。 – 2011-12-30 06:02:11

+1

我认为你是对的,不是很清楚的问题。 – Henrik 2011-12-30 06:05:16

+0

-1,不应该是upvoted。问题是非常清楚,如果你看看所需的结果*之前*跳进来获得第一个答案 – gbn 2011-12-30 06:21:00

-1
select a.id from a minus select b.id from b 

select a.id from a where a.id not in (select b.id from b) 
+2

不在MySQL ... – gbn 2011-12-30 06:03:07

2

使用NOT IN

SELECT ip FROM TableA WHERE TableA.ip NOT IN (SELECT ip FROM TableB) 
-1
SELECT col1, col2, .. , Ip from TableA 
UNION 
SELECT col, col2, ...., Ip from TableB 

要获得差异,你可以用它代替联盟减号操作

+1

问题是关于差异,而不是联盟 – gbn 2011-12-30 06:04:17

+0

-1,不应该upvoted – gbn 2011-12-30 06:20:03