在关联表中,有字段a和字段b,需要查找满足字段a多个值匹配时,字段b的集合
前提描述
t_restaurant_feature餐厅特性中,一个餐厅可包含多个特性
字段名 | 说明 |
---|---|
id | 记录id |
restaurant_id | 餐厅id |
feature_id | 特性id |
餐厅特性表的数据如下 :
t_feature 特性表
字段名 | 说明 |
---|---|
id | 记录id |
name | 特性名称 |
特性表的数据如下:
问题
如何查找同时具有特性:有包厢、可带宠物和支持外卖的餐厅呢
尝试1,in (无法满足)
SELECT
distinct t1.restaurant_id
FROM t_restaurant_feature t1
LEFT JOIN t_feature t2 ON t2.id = t1.feature_id
WHERE t1.feature_id IN (1,2,3)
结果好像不怎么理想:
思考
in 相当于 多个值进行or操作,只要有一个满足即可,不符合pass
尝试2,group by having (正解)
分组后对每组的记录数进行统计,如果需要同时满足的特性数为3,则各个分组中记录总数为3的符合条件,具体sql如下:
SELECT
restaurant_id
FROM t_restaurant_feature
WHERE feature_id IN (1,2,3)
GROUP BY restaurant_id HAVING(COUNT(*)) = 3
结果如下图: