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

Откуда:
Сообщений: 16
Изменение цены всех лекарств на складе, поставленных определенным поставщиком на указанную величину

			update Presence 
				set Presence.p_price=Presence.p_price+@price
				Where Presence.p_M_number in (Select p_M_number from (history h left join Packaging on h.H_M_number=Packaging.Pa_number)
						 left join Presence p on p_M_number=Pa_number where p_quantity>0 and H_S_number=1 )



Вот эта часть дает на выходе столбец, из id лекарств
	Select p_M_number from (history h left join Packaging on h.H_M_number=Packaging.Pa_number)
						 left join Presence p on p_M_number=Pa_number where p_quantity>0 and H_S_number=1



То есть, хочу изменить цену где id входит в столбец полученных id.
А он изменяет цены всех лекарств, которые есть. В чем ошибка?
12 дек 14, 08:22    [16986568]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
ну наверно этот столбец, из id лекарств содержит все возможные id
12 дек 14, 08:44    [16986618]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
mih08,

Модель данных неизвестна, какие данные - тоже, что такое "полученные ид", неясно.

Как можно на ваш вопрос ответить?
"где id входит в столбец полученных id" - реализуется конструкциями in () или exists(), более конкретного ничего сказать нельзя.
12 дек 14, 08:48    [16986627]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
что вернёт запрос ?
SELECT p0.p_M_number 
FROM Presence p0
WHERE NOT EXISTS
(Select p_M_number 
from (history h left join Packaging on h.H_M_number=Packaging.Pa_number)
left join Presence p on p_M_number = Pa_number 
where p_quantity>0 and H_S_number=1
and p_M_number = p0.p_M_number)
12 дек 14, 09:03    [16986696]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
mih08
Member

Откуда:
Сообщений: 16
alexeyvg, я просто только учусь и думаю ошибка в логике in().
Вот если сократить запрос

update Presence 
set Presence.p_price=Presence.p_price+@price
Where Presence.p_M_number in (см скриншот, результат запроса 2 записи)


В этих сточках нет ошибки?
Он обновляет не только две записи которые на скриншоте, а все что есть ( значит where не работает)

К сообщению приложен файл. Размер - 35Kb
12 дек 14, 09:12    [16986718]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
mih08
Member

Откуда:
Сообщений: 16
LexusR,

К сообщению приложен файл. Размер - 17Kb
12 дек 14, 09:14    [16986723]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
mih08
Member

Откуда:
Сообщений: 16
LexusR,

Подскажите с точки зрения in все верно?Всё него можно подставлять селект?
12 дек 14, 09:29    [16986811]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2566
mih08
Изменение цены всех лекарств на складе, поставленных определенным поставщиком на указанную величину
Вот и напишите запрос, который выбирает лекарства на складе, поставленные определенным поставщиком и убедитесь, что это именно то, что вам нужно. А затем обновите у найденных записей цену использую ваш IN, или JOIN, или EXISTS.
12 дек 14, 10:49    [16987210]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
mih08,

а почему имена отмеченных столбцов алиасами/именами таблиц не предваряются?
update Presence 
				set Presence.p_price=Presence.p_price+@price
				Where Presence.p_M_number in (Select p_M_number from (history h left join Packaging on h.H_M_number=Packaging.Pa_number)
						 left join Presence p on p_M_number=Pa_number where p_quantity>0 and H_S_number=1 )
12 дек 14, 10:53    [16987228]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
mih08
LexusR,

Подскажите с точки зрения in все верно?Всё него можно подставлять селект?


скорее всего должно быть что-то более простое-
не все понятно из вашего небрежного написания(не везде проставлены алиасы у полей)
Select p_M_number 
from (history h left join Packaging on h.H_M_number=Packaging.Pa_number)
left join Presence p on p_M_number = Pa_number 
where p_quantity>0 and H_S_number=1


1. раз запрос не ругается значит вы вытаскиваете поле p_M_number из таблицы Presence
- тогда должно быть inner join а не left join
2. Из какой таблицы поля p_quantity>0 and H_S_number=1 ???
если из history то вроде вообще не нужны никакие джойны на Packaging и Presence
и т п
12 дек 14, 11:01    [16987274]     Ответить | Цитировать Сообщить модератору
 Re: Update ошибка  [new]
mih08
Member

Откуда:
Сообщений: 16
Всем большое спасибо, нашел ошибку) Она всё таки была в данных...
12 дек 14, 14:44    [16988986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить