【问题标题】:Get groups that are exactly equal to a table获取与表完全相等的组
【发布时间】:2015-07-16 22:03:15
【问题描述】:

我有一个很容易分组的查询。我需要将具有完全相同记录的组获取到另一个表(关系)。

我在 SQL Server 下使用 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

提前致谢!

【问题讨论】:

    标签: sql sql-server ansi-sql


    【解决方案1】:

    您可以尝试以下方法:

    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)
    

    SQLFiddle

    【讨论】:

    • 绝妙的解决方案!这正是我想要的。非常感谢!
    【解决方案2】:

    要获得相同的集合,请使用内部连接:

    SELECT Table1.Id
    FROM Table1
    INNER JOIN table2 ON table1.id=table2.id
    GROUP BY Table1.Id
    HAVING ...? -- 
    

    【讨论】:

    • 使用 INNER JOIN Table1 可能包含不在 Table2 中的元素。我需要 Table1 的组与 Table2 完全一样。
    • INNER JOIN 只会给出重叠。 LEFT JOIN 将为您提供 T1 中不在 T2 中的元素。
    【解决方案3】:

    CREATE TABLE #T1 (ID INT , [Values] INT) INSERT INTO #T1 VALUES (1,1),(1,2),(1,3),(2,4),(2,5) ,(3,6)

    CREATE TABLE #T2 ([Values] INT) INSERT INTO #T2 VALUES (1),(2),(3),(4)

    从 #T1 中选择 *

    从 #T2 中选择 *

    选择 A.ID 从 ( SELECT ID , COUNT(DISTINCT [Values]) 作为 #T1 的计数 按 ID 分组 ) 一个

    加入 ( SELECT T1.ID, COUNT(DISTINCT T2.[Values]) 计数 从#T1 T1 加入#t2 T2 ON T1.[值] = T2.[值] 按 T​​1.ID 分组 ) 乙 ON A.ID = B.ID AND A.Count = B.Count

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多