【问题标题】:How to select an item that matches all attributes in a table in SQL?如何在SQL中选择一个匹配表中所有属性的项目?
【发布时间】:2015-10-23 21:03:33
【问题描述】:

我有一个包含区域列表的表格(区域)。

**Area**
Area 1
Area 2
Area 3

然后,我有另一个表(人),其中包含名称和区域列表。

**PersonName**     **Area**
Bob                Area 1
Dylan              Area 4
Jimi               Area 6
Hendrix            Area 2
Bob                Area 3
Bob                Area 2
Jimi               Area 3

我想在 Areas 表中查找所有具有 ALL 区域的名称。所以对于上面的示例数据,我会得到输出 Bob。

我当前的查询返回在 Areas 表中教授任何领域的人的姓名。

SELECT DISTINCT PersonName
FROM People, Areas
WHERE Areas.Area = People.Area

返回 Bob、Hendrix、Jimi

如何更改此选项以仅选择 Bob,他拥有与他相关的所有三个区域?

【问题讨论】:

    标签: mysql sql count distinct


    【解决方案1】:

    您可以使用group byhaving。假设People表中的所有区域都有效:

    select p.personname
    from people p
    group by p.personname
    having count(distinct area) = (select count(distinct area) from areas);
    

    如果您知道某个人没有重复的区域并且areas 中没有重复,那么您可以将count(distinct) 替换为count()

    【讨论】:

    • 感谢您的回复!然而,这对我不起作用。它返回了一个包含与 Areas 表中的区域数完全相同的区域数的所有人的列表,但没有检查他们是否都相等。
    • @Duffluc 。 . .您是说people 表中的某些区域不在areas 中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2021-12-03
    • 2022-09-30
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多