使用UNION或INTERSECT进行SQL查询

时间:2014-07-08 17:58:37

标签: sql sql-server sql-server-2005

我在SQL中有2个表,如下所示,需要对数据运行一些测试查询。这些表包含一些示例数据:

Table A
ID       groupName    value
id2000   groupA       1
id2000   groupA       2
id2000   groupA       3
id3000   groupB       1
id3000   groupB       2

Table B
ID       groupNameB    valueB
id2000   groupA        1
id2000   groupA        2
id2000   groupA        -9
id3000   groupB        1
id3000   groupB        -9

表格相似,但实际上是不同的(它们有不同的数据,我只是缩短了堆栈溢出)。

我需要的是加入两者的一年,但是给出了表A中但不在表B中的值。

因此,使用上面的数据,我得到一个结果集:

id2000  groupA 3
id3000  groupB 2

我想它就像一个NOT UNION?

3 个答案:

答案 0 :(得分:1)

您想使用EXCEPT

它从第一个查询中删除也在第二个查询中的行。它不返回query2中不在query1中的行。

select id, groupName, value
from tableA
except
select id, groupNameB, valueB
from tableB

答案 1 :(得分:1)

select a.ID, a.groupName, a.Value 
from [Table A] a
left join [Table B] b
on a.ID = b.ID
and a.groupName = b.groupNameB
and a.Value = b.ValueB
where b.ID is null

答案 2 :(得分:1)

如果我理解正确,这将有效。至少它与我的样本数据有关。

select Id, groupName, value
  FROM tableA 
EXCEPT
select Id, groupName, value
  FROM tableB