Sql 如果某个组中的某些项满足某个条件,如何获取属于该组的所有项?

Sql 如果某个组中的某些项满足某个条件,如何获取属于该组的所有项?,sql,postgresql,Sql,Postgresql,我开始学习SQL和PostgreSQL,我有一个问题: 我如何从一个组中获取所有项目,其中只有一些项目满足一个条件 例如: +________________________+ |id| group_id | name | +------------------------+ | 1| 1 | FOOD | -------------------------- | 2| 1 | SNACK | --------------------------

我开始学习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,因为它们属于组_id,其中一项类似于“FOOD%”


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

您可以使用
存在的

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;

您可以通过以下方式获得结果中所需的所有
组id
s:

SELECT group_id FROM tablename WHERE name LIKE 'FOOD%'
在查询中使用它,并在
中使用运算符

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

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