我需要帮助识别在另一个表中具有不同状态的表成员组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要帮助识别在另一个表中具有不同状态的表成员组相关的知识,希望对你有一定的参考价值。

我无法用谷歌来解决这个问题。我仍然是TSQL的新手,我想我可以用自联接和子查询来解决这个问题。但是我得到了很多结果,不知道如何驯服它们。我很感激帮助。很高兴看到人们为同一个问题提出的所有不同方法。我知道在尝试解决问题时我会获得隧道视觉,当从不同的角度尝试它时会更好。

我的目标是这个。我想返回其PersonID的HairColor彼此不匹配的所有家庭的HouseholdID。无论颜色如何。因此,HouseHoldID 200将返回,因为他们的PersonID的HairColor彼此不同。与HouseHoldID 300不同,其PersonID的HairColor彼此匹配。

               HouseholdMember
+------------+-----------------+-----------+
| MemberID   |   HouseholdID   | PersonID  |
+------------+-----------------+-----------+
|    100     |       200       |     1     |
|    101     |       200       |     2     |
|    102     |       200       |     3     |
|    103     |       300       |     4     |
|    104     |       300       |     5     |
|    105     |       300       |     6     |
+------------+-----------------+-----------+

                    Person
+------------+-----------------+-----------+------------+
|  PersonID  |    FirstName    | LastName  |  HairColor |
+------------+-----------------+-----------+------------+
|     1      |      Josh       |   Smith   |    Brown   |
|     2      |      Jerry      |   Smith   |    Black   |
|     3      |      Ethan      |   Smith   |    Red     |
|     4      |      Mike       |   Jones   |    Black   |
|     5      |      Devan      |   Jones   |    Black   |
|     6      |      Todd       |   Jones   |    Black   |
+------------+-----------------+-----------+------------+

                     Household
+---------------+-----------------+----------------+
|  HouseholdID  |      Name       |    Address     |
+---------------+-----------------+----------------+
|      200      |      Smith's    | 123 Candy Dr   |
|      300      |      Jones's    | 812 Dentist Ln |
+---------------+-----------------+----------------+
答案

一个选项使用聚合:

WITH cte AS (
    SELECT hm.HouseholdID
    FROM HouseholdMember hm
    INNER JOIN Person p ON hm.PersonID = p.PersonID
    GROUP BY hm.HouseholdID
    HAVING COUNT(DISTINCT p.HairColor) > 1
)

SELECT *
FROM Household
WHERE HouseholdID IN (SELECT HouseholdID FROM cte);

enter image description here

Demo

以上是关于我需要帮助识别在另一个表中具有不同状态的表成员组的主要内容,如果未能解决你的问题,请参考以下文章

复杂核心数据查询需要帮助

如何基于多列比较两个不同的表?

如何加入名称作为值存储在另一个表中的表?

如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?

如何从 PostgreSQL 中的另一个表中更新具有随机 id 的表

识别 2 个表中的不同行