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

SBZN
Дата: 18.09.2005 14:16:19
Есть 3 таблицы:
1. Перечень товаров (код товара, все данные о товаре)
2. Перечень магазинов (код магазина, данные магазина)
3. Товары в магазине (код товара, код магазина, дата постаки, дата продажи, продажа (да\нет), возврат (да\нет))

Необходимо создать запрос об отсутствии товара в магазинах: магазин, код товара которого там нет.

Сложность в том, что надо проверить 2 случая:
1. Для данного кода товара в таблице реализации просто нет записи с таким кодом - тогда товара нет ни в одном магазине
2. Для заданного кода товара в таблице реализации сушествуют записи где уже была продажа и не ьыло возврата

Отдельно запросы составлены и объединены union, но это не очень удобно. Совместно условие 2 или 1 приводят к зависанию исполнения запроса..

Помогите, плиз..

ADOQuery Access
Rivkin Dmitry
Дата: 18.09.2005 19:15:07
1. Для данного кода товара в таблице реализации просто нет записи с таким кодом - тогда товара нет ни в одном магазине

Я так понимаю - 1. Для данного кода товара в таблице реализации просто нет записи с таким кодом - тогда товара нет ни в одном магазине и никогда не было!

SELECT T.[код магазина], P.[код товара]
FROM [Перечень товаров] AS P
LEFT JOIN [Товары в магазине] AS T
WHERE T..[код товара] IS NULL

Логично здесь в фильтр добавить еще и дату после которой надо вести проверку And [дата постаки] > X

Второй запрос - налогичен, только добавляется фильтр AND [дата продажи] IS NOT NULL
(c)VIG
Дата: 18.09.2005 20:26:58
select m.[код магазина], t.[код товара]
from  [Перечень товаров] as t
cross join [Перечень магазинов] as m
left join [Товары в магазине] as tm
on tm.[код магазина]=m.[код магазина]
and tm.[код товара]=t.[код товара]
where tm.[код товара] is null
or (tm.[продажа] and not tm[возврат])
SBZN
Дата: 19.09.2005 22:28:18
Rivkin Dmitry

Огромное спаибо за желание помочь, но вопрос был именно в совмещении этих двух запросов удобным образом.



(c)VIG

Огромное спасибо за желание помочь!!!! Хотя JET не пропускает составное условие в join

и where tm.[код товара] is null or (tm.[продажа] and not tm[возврат]) приводит к зависанию..


Но я уже сделал правильно - комбинация 3-х подзапросов. Уверен, можно намного проще (примерно как вы описали), но всё работает правильно и скорость приемлемая.