Sql 如果某个组中的某些项满足某个条件,如何获取属于该组的所有项?
我开始学习SQL和PostgreSQL,我有一个问题: 我如何从一个组中获取所有项目,其中只有一些项目满足一个条件 例如:Sql 如果某个组中的某些项满足某个条件,如何获取属于该组的所有项?,sql,postgresql,Sql,Postgresql,我开始学习SQL和PostgreSQL,我有一个问题: 我如何从一个组中获取所有项目,其中只有一些项目满足一个条件 例如: +________________________+ |id| group_id | name | +------------------------+ | 1| 1 | FOOD | -------------------------- | 2| 1 | SNACK | --------------------------
+________________________+
|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%')
谢谢,成功了!既然给出的答案似乎成功地解决了你的问题,请接受其中一个。接受答案有助于未来有相同问题的提问者。请不要留下令人满意的答案。