mysql 一个字段多值同时匹配 group by having

文章目录

  • 前提描述
  • 问题
    • 尝试1,in (无法满足)
      • 思考
    • 尝试2,group by having (正解)

在关联表中,有字段a和字段b,需要查找满足字段a多个值匹配时,字段b的集合

前提描述

t_restaurant_feature餐厅特性中,一个餐厅可包含多个特性

字段名 说明
id 记录id
restaurant_id 餐厅id
feature_id 特性id

餐厅特性表的数据如下 :
mysql 一个字段多值同时匹配 group by having_第1张图片


t_feature 特性表

字段名 说明
id 记录id
name 特性名称

特性表的数据如下:
mysql 一个字段多值同时匹配 group by having_第2张图片

问题

如何查找同时具有特性:有包厢、可带宠物和支持外卖的餐厅呢

尝试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查询的结果

思考

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 

结果如下图:
group by having结果图

你可能感兴趣的:(数据库,sql,mysql,sql,数据库)