Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
Друзья,
помогите, пожалуйста, сделать запрос.

Есть таблица history, в котором прописываются продажи
skladdatatovar kolvo summa

есть таблица nalich
skladtovar kolvo

в которой,
если товара на складе есть, то есть строка с id товара, id склада и количество
если товара на складе нет, то строки с id товара, id склада нет (акцентирую на то что не прописывается 0 в колве),

Нужен запрос, который в результате выдаст список товара в выбранном складе, который продавался за определенный период, но сейчас отсутствует, т.е. в таблице nalich, нет строк с этими товарами в выбранном складе

Помогите, пожалуйста!
3 мар 13, 00:18    [14004472]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
НеВыходитКаменныйЦветок
Guest
ilshatkin,

какие-то конкретные проблемы с not exists/left join, или просто неохота подумать?
3 мар 13, 00:29    [14004493]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
НеВыходитКаменныйЦветок,

просто не разу такие запросы не далал и обращаюсь ради экономии времени и сил
3 мар 13, 00:31    [14004499]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
НеВыходитКаменныйЦветок
Guest
ilshatkin,
ну почитайте хотя бы это, надеюсь, не слишком много времени и сил уйдет
exists
может и мысли появятся, как получить нужный результат
3 мар 13, 00:41    [14004525]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
НеВыходитКаменныйЦветок,

спасибо за наводку, сейчас попробую сделать
3 мар 13, 01:09    [14004616]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
товарищи спецы,
делаю вот так но не работает.

SELECT DISTINCT historyBook.tovar
FROM historyBook
WHERE
(historyBook.data >= @data1) AND
(historyBook.data <= @data2) AND
(historyBook.operation = @operation)AND
(historyBook.sklad = @sklad) AND
not EXISTS(SELECT tovar FROM nali4ie WHERE sklad = @sklad)


подскажите, пожалуйста, в чем проблемма, перепробовал уже как только можно
3 мар 13, 13:09    [14005176]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
КаменныйЦветок
Guest
ilshatkin,

не работает = выдает ошибку?
не работает = выводит неправильный результат?

почему у вас в not exists проверятся наличие любого товара на складе, а не конкретного?
3 мар 13, 13:21    [14005196]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
КаменныйЦветок
ilshatkin,

не работает = выдает ошибку?
не работает = выводит неправильный результат?


не работает = выводит неправильный результат, а именно ничего

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



КаменныйЦветок
почему у вас в not exists проверятся наличие любого товара на складе, а не конкретного?

возможно это делаю не правильно, я не знаю что ответить вам

смысл запроса, выдать список товара в выбранном складе, который продавался за определенный период, но сейчас отсутствует
3 мар 13, 13:27    [14005214]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
нужное сопоставление
Guest
ilshatkin
SELECT DISTINCT historyBook.tovar
FROM historyBook
...
not EXISTS(SELECT tovar FROM nali4ie WHERE sklad = @sklad)


подскажите, пожалуйста, в чем проблемма, перепробовал уже как только можно

not exists не магический, он сам не догадается что tovar оттуда и отсюда нужно как-то сопоставить.
ему надо сказать об этом в where. чтобы не вводить себя в заблуждение между select и from внутри exists напиши нечто пустое бессмысленное. exists проверяет существование записи в подзапросе, select (т.е. выдавание как результат в видет таблицы) каких бы то ни было полей он не деляет и все что между select и from просто игнорирует.

not EXISTS(SELECT 1 FROM nali4ie WHERE sklad = @sklad and <нужное сопоставление с внешней таблицец>)
3 мар 13, 13:32    [14005220]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
КаменныйЦветок
Guest
ilshatkin,
ну так добавьте в Ваш подзапрос проверку на наличие товара из основного запроса.
вот вам еще одна статейка в помощь
3 мар 13, 13:37    [14005230]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
сделал вот так и заработало)),

SELECT DISTINCT historyBook.tovar
	FROM  historyBook	
	WHERE 
	       (historyBook.data >= @data1) AND
		   (historyBook.data <= @data2) AND 
		   (historyBook.operation = @operation)AND
		   (historyBook.sklad = @sklad) AND 		   
		  	not EXISTS(SELECT 1 FROM nali4ie WHERE nali4ie.sklad = @sklad and historyBook.tovar=nali4ie.tovar)



спасибо за помощь!

только смущает,
SELECT 1 FROM
так нормально писать запросы?
3 мар 13, 13:41    [14005236]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ilshatkin,

общепринято в EXISTS() (и только в нём!) писать SELECT *
В данном случае непринципиально
3 мар 13, 13:48    [14005248]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос  [new]
ilshatkin
Member

Откуда:
Сообщений: 154
Всем примного благодарен! Спасибо!
3 мар 13, 20:50    [14005983]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить