Помогите составить запрос
TechnoDreamer
Дата: 01.10.2005 00:24:22
Есть таблица t1 (рецепты-ингредиенты) с полями RecID и IngrID
Есть таблица t2 (рецепты) с полем RecID
Структура такая:
таблица один:
RecID || IngrID
=============
1 || 124
1 || 543
1 || 13
2 || 45
2 || 13
3 || 53
Таблица 2
RecID || Другие поля
=================
1 || ...
2 || ...
3 || ...
Нужен запрос, выдающий рецепты в которые входят все ингредиенты из списка.
Например такой запрос выдает рецепты в которых есть хотя бы один из необходимых ингредиентов:
select DISTINCT t2.* from t2,t1 where t2.RecID=t1.RecID and t1.IngrID in (13, 45)
А как должен выглядеть запрос, ищущий рецепты в которые должны включать все необходимые ингредиенты.
TechnoDreamer
Дата: 01.10.2005 02:33:52
Пробую так:
select t2.* from t2
JOIN t1 Ingr0 ON (t2.RecID=Ingr0.RecID) AND (Ingr0.IngrID = 3216)
JOIN t1 Ingr1 ON (t2.RecID=Ingr1.RecID) AND (Ingr1.IngrID = 2146)
Выдает:
"Ошибка синтаксиса в предложении FROM"
Где ошибка?
Тяп-ляп
Дата: 01.10.2005 11:23:58
Это называется реляционное деление.
Сейчас поищу примерчик
Тяп-ляп
Дата: 01.10.2005 11:28:21
Вот статья насчет этого
TechnoDreamer
Дата: 02.10.2005 17:29:29
Большое спасибо, именно то что надо, всё работает!
Seraph
Дата: 02.10.2005 20:30:16
вобщем тема такая...
есть две таблицы
T1
id | name
T2
name
нужно выбрать все id такие, где name-ы совпадают, но если вторая таблица пуста, то выбрать все id из первой
сложности возникают с "выбрать все id из первой,если вторая пуста"
вторая пуста - значит в ней нету записей
Пусть
T1
id | name
1 A
2 B
3 A
Должно получиться:
1) Если
T2
name
A
то результат
id
1
3
1) Если
T2 - пуста, то результат
id
1
2
3
Seraph
Дата: 02.10.2005 20:37:20
Пишу такой простенький запрос
SELECT T1.id, T2.name
FROM T2 RIGHT JOIN T1 ON T2.name = T1.name;
получаю результат если T2 содержит запись "A" (см. в прошлом сообщении)
id | name
1 - А
2 - NULL
3 - A
и если T2 пуста, то соответсвенно
id | name
1 - NULL
2 - NULL
3 - NULL
как добится той цели, что мне нужно...
если написать WHERE из задать в нем условие на равенство или неравенство записей в Т2 нулю , то конструктор Аксесса на это дело не реагирует, ошибки выдает... Или я не правильно пишу?
плиз, подскажите?!
Пользователь2
Дата: 03.10.2005 10:47:43
Попробуй так:
SELECT T1.ID, T1.name
FROM T1
WHERE (((T1.name) In (
SELECT T2.name FROM T2)
Or (T1.name) Like (IIf(DCount("*","T2")=0,"*"))))
ORDER BY T1.ID; |