获取完全等于 table 的组
Get groups that are exactly equal to a table
我有一个可以轻松分组的查询。我需要获取与另一个 table(关系)完全相同记录的组。
我在 SQL 服务器下使用 ANSI-SQL,但我接受任何实现的答案。
例如:
表 1:
Id | Value
---+------
1 | 1
1 | 2
1 | 3
2 | 4
3 | 2
4 | 3
表 2:
Value | ...
------+------
1 | ...
2 | ...
3 | ...
在我的例子中,结果是:
Id |
---+
1 |
怎么想象会是这样的代码:
SELECT Table1.Id
FROM Table1
GROUP BY Table1.Id
HAVING ...? -- The group that has exactly the same elements of Table2
提前致谢!
要获得相同的集合,请使用内部联接:
SELECT Table1.Id
FROM Table1
INNER JOIN table2 ON table1.id=table2.id
GROUP BY Table1.Id
HAVING ...? --
您可以尝试以下方法:
select t1.Id
from Table2 t2
join Table1 t1 on t1.value = t2.value
group by t1.Id
having count(distinct t1.value) = (select count(*) from Table2)
CREATE TABLE #T1 (ID INT , [Values] INT) 插入 #T1 值 (1,1),(1,2),(1,3),(2,4) ,(2,5),(3,6)
创建 TABLE #T2 ([值] INT) 插入 #T2 值 (1),(2),(3),(4)
SELECT * 来自#T1
SELECT * 来自#T2
SELECT A.ID
从
( SELECT ID , COUNT(DISTINCT [Values]) AS Count FROM #T1
按 ID 分组
) A
加入
(
SELECT T1.ID, COUNT(DISTINCT T2.[Values]) 计数
来自#T1 T1
加入#t2 T2
在 T1.[值] = T2.[值]
分组依据 T1.ID
)乙
在 A.ID = B.ID 和 A.Count = B.Count
我有一个可以轻松分组的查询。我需要获取与另一个 table(关系)完全相同记录的组。
我在 SQL 服务器下使用 ANSI-SQL,但我接受任何实现的答案。
例如:
表 1:
Id | Value
---+------
1 | 1
1 | 2
1 | 3
2 | 4
3 | 2
4 | 3
表 2:
Value | ...
------+------
1 | ...
2 | ...
3 | ...
在我的例子中,结果是:
Id |
---+
1 |
怎么想象会是这样的代码:
SELECT Table1.Id
FROM Table1
GROUP BY Table1.Id
HAVING ...? -- The group that has exactly the same elements of Table2
提前致谢!
要获得相同的集合,请使用内部联接:
SELECT Table1.Id
FROM Table1
INNER JOIN table2 ON table1.id=table2.id
GROUP BY Table1.Id
HAVING ...? --
您可以尝试以下方法:
select t1.Id
from Table2 t2
join Table1 t1 on t1.value = t2.value
group by t1.Id
having count(distinct t1.value) = (select count(*) from Table2)
CREATE TABLE #T1 (ID INT , [Values] INT) 插入 #T1 值 (1,1),(1,2),(1,3),(2,4) ,(2,5),(3,6)
创建 TABLE #T2 ([值] INT) 插入 #T2 值 (1),(2),(3),(4)
SELECT * 来自#T1
SELECT * 来自#T2
SELECT A.ID 从 ( SELECT ID , COUNT(DISTINCT [Values]) AS Count FROM #T1 按 ID 分组 ) A
加入 ( SELECT T1.ID, COUNT(DISTINCT T2.[Values]) 计数 来自#T1 T1 加入#t2 T2 在 T1.[值] = T2.[值] 分组依据 T1.ID )乙 在 A.ID = B.ID 和 A.Count = B.Count