我正在使用Access进行食谱数据库,这是Uni的练习。
我试图查询多对多关系。
我有ricette
和ingredienti
个表,以及一个名为ricetta_ingrediente
的联结表。现在我应该创建一个查询来检索与使用的ingredienti相关联的每个ricette。
编辑:部分问题已被删除,我需要使用使用的最多成分来检索配方的成分,它是'我必须得到的结果。
每次尝试都会遇到语法错误或空结果 - 我该如何实现此查询?
更多信息
关系架构
[
我试图实施this suggestion,失败了,应该怎么做?
此处还有我的尝试和访问错误:
[
答案 0 :(得分:1)
使用查询构建器DesignView来帮助构建SQL语句。结果应如下所示:
SELECT ricette.nome, ingredienti.nome
FROM ingredienti
RIGHT JOIN (ricette RIGHT JOIN ricetta_ingrediente
ON ricette.ID = ricetta_ingrediente.id_ricetta)
ON ingredienti.ID = ricetta_ingrediente.id_ingrediente;
检索含有最多成分和成分的食谱,例如:
SELECT TOP 1 ricette.nome, ingredienti.nome
FROM (SELECT id_ricetta, Count([id_ingrediente]) AS CountIng
FROM ricetta_ingrediente GROUP BY id_ricetta) AS Q1
RIGHT JOIN (ricette RIGHT JOIN (ingredienti RIGHT JOIN ricetta_ingrediente
ON ingredienti.ID = ricetta_ingrediente.id_ingrediente)
ON ricette.ID = ricetta_ingrediente.id_ricetta)
ON Q1.id_ricetta = ricetta_ingrediente.id_ricetta
ORDER BY Q1.CountIng DESC;
这不会解决关系。所有配料数量与TOP 1计数相匹配的食谱将返回。查询应该如何知道您只需要1和哪一个?
答案 1 :(得分:0)
您的查询没问题。你只需要括号,因为这是MS Access。
我也会使用表别名:
SELECT r.nome, i.nome
FROM (ricette as r INNER JOIN
ricetta_ingrediente as ri
ON r.ID = ri.id_ricetta
) INNER JOIN
ingredienti as i
ON i.ID = ri.id_ingrediente;
编辑:
修改后的问题:
SELECT TOP (1) r.nome
FROM (ricette as r INNER JOIN
ricetta_ingrediente as ri
ON r.ID = ri.id_ricetta
) INNER JOIN
ingredienti as i
ON i.ID = ri.id_ingrediente
GROUP BY r.nome
ORDER BY COUNT(*) DESC;