对不起,我是SQL的新手,标题可能不太清楚,可能更容易通过示例进行解释。
我有一张桌子(见下文),其中包含一系列午餐的所有食物。
---------------------------
| id | lunch_id | food_id |
---------------------------
| 1 | 11 | 21 |
| 2 | 11 | 22 |
| 3 | 11 | 23 |
| 4 | 12 | 21 |
| 5 | 12 | 24 |
| 6 | 12 | 25 |
| 7 | 13 | 21 |
| 8 | 13 | 23 |
| 9 | 13 | 26 |
我要选择所有包含特定食品列表的lunch_id
。
例如我想要包含lunch_id
21 AND 23的所有food_id
,在此示例中,结果为11和13。
我可以使用一系列SQL语句来做到这一点,但是我怀疑有更好的方法来实现它。
答案 0 :(得分:4)
按lunch_id
分组,仅接受同时具有两者 food_id
的那些分组。
select lunch_id
from your_table
where food_id in (21,23)
group by lunch_id
having count(distinct food_id) = 2
答案 1 :(得分:0)
您可以使用存在
select t1.* from table_name t1
where exists ( select 1 from table_name t2 where t1.lunch_id =t2.lunch_id
and t2.food_id in (21,23
having count(*)=2
)