Access多对多关系查询:获取食材最多的菜谱及其食材
解决Access菜谱数据库的最大食材数菜谱查询问题
嘿,我懂你在大学作业里卡壳的这个Access查询问题了!咱们一步步拆解搞定它——核心思路是先算出每个菜谱的食材用量数,定位到数量最多的那些菜谱,再关联回去拿到它们对应的所有食材。
完整查询语句
下面这个语句能准确返回所有使用食材数量最多的菜谱,以及它们对应的每一种食材(如果有多个菜谱并列最多,都会被完整列出来):
SELECT r.id_ricetta, r.nome_ricetta, i.nome_ingrediente FROM ricette r INNER JOIN ricetta_ingrediente ri ON r.id_ricetta = ri.id_ricetta INNER JOIN ingredienti i ON ri.id_ingrediente = i.id_ingrediente WHERE r.id_ricetta IN ( -- 筛选出食材数量等于最大值的菜谱ID SELECT r_sub.id_ricetta FROM ricette r_sub INNER JOIN ricetta_ingrediente ri_sub ON r_sub.id_ricetta = ri_sub.id_ricetta GROUP BY r_sub.id_ricetta HAVING COUNT(ri_sub.id_ingrediente) = ( -- 计算所有菜谱中最大的食材数量 SELECT MAX(conteggio) AS max_ingredienti FROM ( -- 统计每个菜谱的食材数量 SELECT COUNT(ri_inner.id_ingrediente) AS conteggio FROM ricette r_inner INNER JOIN ricetta_ingrediente ri_inner ON r_inner.id_ricetta = ri_inner.id_ricetta GROUP BY r_inner.id_ricetta ) AS conteggi_ricette ) ) ORDER BY r.id_ricetta, i.nome_ingrediente;
关键逻辑解释
- 最内层子查询:统计每个菜谱关联的食材数量,生成一份“菜谱-食材数”的清单。
- 中间子查询:从这份清单里揪出最大的食材数量值。
- 外层子查询:筛选出食材数量等于这个最大值的所有菜谱ID。
- 主查询:通过菜谱ID关联中间表和食材表,最终输出菜谱信息+对应的所有食材。
适配你的数据库的小提示
如果你的字段名和示例不一样(比如菜谱主键不是id_ricetta、菜谱名称不是nome_ricetta),记得把语句里的字段名替换成你数据库里的实际名称。
内容的提问来源于stack exchange,提问作者K3nzie
相关产品推荐
相关产品推荐

