powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите написать запросик
12 сообщений из 12, страница 1 из 1
Помогите написать запросик
    #39893613
hitlocker1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
начал учить SQL, на руках книжка про "SQL вообще", из средств- только Access.
в книжке есть вот такой пример:

SELECT DISTINCT Recipes.RecipeTitle
FROM Recipes INNER JOIN Recipe_Ingredients
ON Recipes.RecipeID = Recipe_Ingredients.RecipeID
WHERE Recipe_Ingredients.IngredientID IN (1, 9)

т.е. он вытаскивает названия рецептов, в которых участвуют ингредиенты 1 или 9. с этим запросом все понятно, но мне пришла в голову мысли, - а как бы вытащить рецепты, в которых используются ингредиенты и 1, и 9 (учебная база мелкая - такой рецепт там только один).

Исходя из книжки, мне кажется что это достаточно легко прописать через INTERSECT, но его вроде как нет в Access и в паре мест я прочитал советы в стиле "в Access вместо Intersect используется Inner Join). На это момент я и торможу, т.к. не могу придумать какой же еще inner join вложить в запрос. а любопытство мучает...

Спасибо.
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893615
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WHERE Recipe_Ingredients.IngredientID=1 and Recipe_Ingredients.IngredientID=9
WHERE Recipe_Ingredients.IngredientID=1 or Recipe_Ingredients.IngredientID=9
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893618
hitlocker1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

вариант с OR это вроде тоже самое что уже написанный IN

а вариант с AND просто нерабочий - он выдает пустой результат (потому что Ingredient.ID в отдельно взятой строке никак не может быть 1 and 9)
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893621
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аaaaa..... точно
Попробуй после
Having count(Recipe_Ingredients.IngredientID)>1
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893637
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitlocker1
а как бы вытащить рецепты, в которых используются ингредиенты и 1, и 9
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Recipes.RecipeTitle
FROM Recipes 
INNER JOIN Recipe_Ingredients ON Recipes.RecipeID = Recipe_Ingredients.RecipeID
WHERE Recipe_Ingredients.IngredientID IN (1, 9)
GROUP BY Recipes.RecipeTitle
HAVING COUNT(DISTINCT Recipe_Ingredients.IngredientID) = 2
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893644
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT Recipes.RecipeTitle 
FROM Recipes INNER JOIN
(
SELECT DISTINCT Q1.RecipeID  FROM 
(
(SELECT * FROM Recipe_Ingredients WHERE IngredientID=1) AS Q1
INNER JOIN
(SELECT * FROM Recipe_Ingredients WHERE IngredientID=9) AS Q2
ON Q1.RecipeID=Q2.RecipeID
)
) AS QQ
ON Recipes.RecipeID = QQ.RecipeID
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893681
hitlocker1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
спасибо. работает.
попробую переварить и осознать)))
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893682
hitlocker1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
access ругается - ошибка синтаксиса (пропущен оператор) в выражении запроса 'count ............. и т.д. = 2'
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893689
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitlocker1 , ну убери DISTINCT, делов-то... только убедись, что ингры в рецептах уникальны.
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893806
Еще вариант:
Код: sql
1.
2.
3.
4.
SELECT Recipes.RecipeTitle FROM Recipes  WHERE 
EXISTS (SELECT * FROM Recipe_Ingredients WHERE Recipe_Ingredients.RecipeID = Recipes.RecipeID And IngredientID=1)
And
EXISTS (SELECT * FROM Recipe_Ingredients WHERE Recipe_Ingredients.RecipeID = Recipes.RecipeID And IngredientID=9)

В таком запросе результат можно редактировать.
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39893866
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitlocker1, так-то и такое должно работать
Код: sql
1.
2.
3.
SELECT Recipes.RecipeTitle
FROM Recipes INNER JOIN (Recipe_Ingredients AS t1 INNER JOIN Recipe_Ingredients AS t2 ON t1.RecipeID = t2.RecipeID) ON Recipes.RecipeID = t1.RecipeID
WHERE t2.IngredientID=9 AND t1.IngredientID=1;
...
Рейтинг: 0 / 0
Помогите написать запросик
    #39894152
hitlocker1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем большое спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите написать запросик
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]