在所有子查询中查找公共值

时间:2013-05-07 04:29:57

标签: sql sql-server inner-join

我有一堆子查询,每个子查询返回一堆带有两个ID字段的记录。我需要返回所有子查询中存在的所有ID对的列表。我以为我可以做这样的事情:

SELECT Q1.V1, Q1.V2
FROM ( [SUBQUERY1] ) AS Q1
INNER JOIN ( [SUBQUERY2] ) AS Q2 ON Q2.V1 = Q1.V1 AND Q2.V2 = Q1.V2
INNER JOIN ( [SUBQUERY3] ) AS Q3 ON Q3.V1 = Q2.V1 AND Q3.V2 = Q2.V2
INNER JOIN ( [SUBQUERY4] ) AS Q4 ON Q4.V1 = Q3.V1 AND Q4.V2 = Q3.V2

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

显然答案是使用INTERSECT

[SUBQUERY1]
INTERSECT
[SUBQUERY2]
INTERSECT
[SUBQUERY3]
INTERSECT
[SUBQUERY4]

尼斯!

答案 1 :(得分:0)

相交可能更好,但你也可以使用group with with HAVING COUNT(*)> number_of_subqueries子句。

select V1, V2
from 
(
(subquery_1)
union 
(subquery_2)
union 
(subquery_3)
)
group by v1, v2
having count(*) > 3