Доступ к значению SQL Select с большим количеством строк - PullRequest
0 голосов
/ 20 мая 2018

Я использую Access для базы данных кулинарной книги, упражнение для Uni.

Я пытаюсь сделать запрос для отношения многие ко многим.

У меня есть ricette и ingredienti таблиц и соединительная таблица с именем ricetta_ingrediente.Теперь я должен сделать запрос, который извлекает каждый рикет, связанный с используемыми ингредиентами.

РЕДАКТИРОВАТЬ: Часть вопроса была удалена, мне нужно получить ингредиенты рецепта, из которых большинство используемых ингредиентов , это результат, который я должен получить.

Каждая попытка вызвала у меня либо синтаксическую ошибку, либо пустой результат - как мне выполнить этот запрос?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Соотношениесхема

[1

Я пытался реализовать это предложение , терпя неудачу, как это должно быть?

Также вот мойпопробуйте и ошибка доступа:

[3]

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Ваш запрос в порядке.Вам просто нужны скобки, потому что это 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;
0 голосов
/ 20 мая 2018

Используйте конструктор запросов 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;

Это не разрешит связи.Все рецепты с количеством ингредиентов, соответствующих количеству ТОП-1, вернутся.Как запрос должен знать, что вы хотите только 1 и какой?

...