You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:17