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
SBZN
Дата: 19.09.2005 22:28:18
Rivkin Dmitry
Огромное спаибо за желание помочь, но вопрос был именно в совмещении этих двух запросов удобным образом.
(c)VIG
Огромное спасибо за желание помочь!!!! Хотя JET не пропускает составное условие в join
и where tm.[код товара] is null or (tm.[продажа] and not tm[возврат]) приводит к зависанию..
Но я уже сделал правильно - комбинация 3-х подзапросов. Уверен, можно намного проще (примерно как вы описали), но всё работает правильно и скорость приемлемая.