Помогите составить запрос

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;