dev*_*ull 4 sql sql-server-2005
给定两个表(每个表中的行是不同的):
1) x | y z 2) x | y z
------- --- ------- ---
1 | a a 1 | a a
1 | b b 1 | b b
2 | a 1 | c
2 | b 2 | a
2 | c 2 | b
2 | c
Run Code Online (Sandbox Code Playgroud)
有没有办法在选择值x
的第一表,其在值的子集的列y
柱,对于x
在精确匹配值z
的第二个表的列?
如果1)
预期的结果是1
.如果c
添加到第二个表,则预期结果为2
.
在这种情况下2)
,预期结果是no record
因为第一个表中的子集都不匹配第二个表中的子集.如果c
添加到第二个表,则预期结果为1, 2
.
我已经尝试使用except
和intersect
比较第一个表的子集和第二个表,它工作正常,但它需要太长的intersect
部分,我无法弄清楚为什么(第一个表有大约10.000个记录,第二个表有约10).
编辑:我已经更新了问题以提供额外的方案.
SELECT
table1.x
FROM
table1
INNER JOIN
table2
ON table1.y = table2.z
GROUP BY
table1.x
HAVING
COUNT(*) = (SELECT COUNT(*) FROM table2 AS lookup)
AND COUNT(*) = (SELECT COUNT(*) FROM table1 AS lookup WHERE x = table1.x)
Run Code Online (Sandbox Code Playgroud)