如何比较Sql Server中具有公共字段的两个单独查询的结果?

时间:2014-09-26 22:53:12

标签: sql-server

也许是因为它是星期五,但我似乎无法得到这个,感觉它应该真的很容易。

我有一个结果集(从多个表中提取数据),它给出了以下结果集:

房间类型| ImageID |日期

下一个查询(从上面的单独表中提取)结果给出了:

ImageID |日期|标签

我只是想比较一下结果,看看哪个imageid在两个结果之间是共同的,哪个是分别落入每个列表。

我尝试将每个结果插入临时表并在imageid上进行连接,但是sql server不喜欢这样。理想情况下,我想要一个允许我在不创建临时表的情况下执行此操作的解决方案。

我研究了使用联合但似乎因为两个结果没有相同的列我避开了那条路线。

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以通过多种不同方式执行此操作,例如,您可以使用内部联接或使用两个集合作为派生表进行交叉。

select ImageID from (your_first_query)
intersect
select ImageID from (your_second_query)

select query1.ImageID 
from (your_first_query) query1
inner join (your_second_query) query2 on query1.ImageID = query2.ImageID 

答案 1 :(得分:0)

您没有解释为什么SQL-Server不喜欢在ImageId上执行连接。应该不是问题。至于您的第一个问题,您需要将两个查询转换为子查询并对它们执行全出加入:

Select * from
(Select Room Type, ImageID, Date ...) T1 Full Outer Join
(Select ImageID, Date, Tagged ...) T2 on T1.ImageId = T2.ImageId

对连接两侧的Null值的分析应该可以为您提供所需的内容。

答案 2 :(得分:0)

SELECT TableA.ImageID
FROM TableA
WHERE TableA.ImageID 
IN (SELECT TableB.ImageID FROM TableB)

答案 3 :(得分:0)

select q1.ImageID 
from  (your_first_query) q1
WHERE EXISTS (select 1
              from (your_second_query)
              WHERE ImageID = q1.ImageID)