【问题标题】:How to get all the items belonging to a group where some items of this group satisfy a condition?如何获取属于该组的某些项目满足条件的组的所有项目?
【发布时间】:2021-03-28 13:46:36
【问题描述】:

我开始使用 SQL 和 PostgreSQL,我有一个问题:

如何从只有一些项目满足条件的组中获取所有项目?

例如:

+________________________+
|id| group_id |    name  |
+------------------------+
| 1|     1    |   FOOD   |
--------------------------
| 2|     1    |   SNACK  |
--------------------------
| 3|     2    |   SODA   |
--------------------------
| 4|     1    |CHOCOLATE |
--------------------------

SELECT id FROM table WHERE any in group_id name LIKE 'FOOD%'

我想检索 1,2,4,因为它们属于 group_id,其中一项是 LIKE 'FOOD%'。

我无法通过 group_id 检索它们,因为我有不同的数据库,其中 group_id 发生了变化,有时我感兴趣的 group_id 是 1,2... 在所有数据库中唯一相同的是我是对名称 LIKE 'FOOD%' 的 group_id 感兴趣。

【问题讨论】:

  • 既然给出的答案似乎成功解决了您的问题,请接受一个。接受答案有助于未来有相同问题的提问者。请不要让 Active 留下一个令人满意的答案。

标签: sql postgresql


【解决方案1】:

您可以通过以下方式在结果中获得您需要的所有group_ids:

SELECT group_id FROM tablename WHERE name LIKE 'FOOD%'

在查询中使用运算符IN:

SELECT * 
FROM tablename
WHERE group_id IN (SELECT group_id FROM tablename WHERE name LIKE 'FOOD%')

【讨论】:

    【解决方案2】:

    你可以使用exists:

    select t.*
    from t
    where exits (select 1
                 from t t2
                 where t2.group_id = t.group_id and t2.name like 'FOOD%'
                );
    

    您可能还会发现将所有食物组合在每组一行中很方便:

    select group_id,
           array_agg(name order by name)
    from t
    group by group_id
    having count(*) filter (where name like 'FOOD%') > 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2013-01-06
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多