返回查询之间不匹配记录的列表

时间:2014-11-10 13:20:58

标签: sql-server

我很抱歉,如果已经问过这个我找不到任何我想要的东西 - > 有没有办法返回匹配两个查询的记录列表,例如

ID  |  Name  | Color
1      crayon  blue
2      marker  red
3      paint   green

"Select Id, Name, color from TableA" =

ID  |  Name  | Color
1      crayon  blue
2      marker  red
3      paint   green

"Select Id, Name, color from TableA where color = 'blue'" = 

ID  |  Name  | Color
1      crayon  blue

我希望有一些功能可以采用上面的两个查询并提供如下结果集:

ID  |  Name  | Color
2      marker  red
3      paint   green

作为两个不相等的查询的记录。 提前谢谢!

3 个答案:

答案 0 :(得分:4)

我将假设你的查询真的更复杂,这只是一个例子。一种方法是使用left join

with q1 as (<query1 here>),
     q2 as (<query2 here>)
select q1.*
from q1 left join
     q2
     on q1.id = q2.id
where q2.id is null;

这假设匹配在id。如果有更多列需要相同,请将它们添加到on子句中。

答案 1 :(得分:1)

这个怎么样:

<query 1 here>
EXCEPT
<query 2 here>

当然,使用EXCEPT假定:

  • 列的数量和顺序必须相同 查询。
  • 数据类型必须兼容。

答案 2 :(得分:0)

您可以尝试以下查询来获得所需的结果集:

Select Id, Name, color from TableA
EXCEPT
Select Id, Name, color from TableA where color = 'blue'