Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работоспособность составного запроса, mySQL [D7, XP, 2003]


Дмитрий ©   (2015-10-19 20:25:00) 

Таблица изделий, таблица типоразмеров с количеством
Изделия обрабатываются списком
Подсчитать общее количество

Update Items
Set Items.Num = (select Sum(sizes.Num) from sizes where sizes.ItemID = Items.ItemID)
Where (ItemID in (65091,58401,65092));


Нарисовал тупо в лоб
Не могу понять как передатся параметр, должно ли быть видно внутри вложенного подзапроса параметры надзапроса?


sniknik   (2015-10-21 00:34:00) [1]

> как сработает конструкция
по логике правильно, засуммирует... и даже быстрее чем с подзапросами должно т.к. суть однопроходная, а не много-по количеству значений/подзапросов.
но я вообще на mySQL в последнее время не пишу, проверять надо (и чтоб было виднее на большом количестве значений в условии).


Дмитрий   (2015-10-20 15:39:00) [2]

спасибо,
т.е. поля обновляемой таблицы видны во вложенном запросе

конструкция
Set Num = (Select Sum(Num) from sizes Where ItemID=Items.ItemID)
правильная и надежная, и ее можно использовать спокойно?

как сработает конструкция
Set Items.Num=Items.Num + sizes.Num
когда на каждый Items существует много связанных sizes ?


sniknik   (2015-10-19 22:33:00) [3]

кстати в mySQL может пройти и вот такой синтаксис -
Update Items,sizes
Set Items.Num=Items.Num + sizes.Num
Where Items.ItemID=sizes.ItemID AND Items.ItemID IN (65091,58401,65092)


sniknik   (2015-10-19 22:22:00) [4]

это не под/над, а вложенный запрос (запрос в запросе), будет вызван на каждую операцию апдейта (тут 3 раза), и соответственно каждое условие выбора (не параметр, параметр несколько иное) будет меняться.
убрать лишнее (оставить только "связывающий" алиас где неоднозначность) получится -
Update Items
Set Num = (Select Sum(Num) from sizes Where ItemID= Items.ItemID)
Where ItemIDin (65091,58401,65092)
так, ИМХО, понятнее.

что равнозначно 3м командам (еще понятнее, но так не пишут...) -
Update Items
Set Num = (Select Sum(Num) from sizes Where ItemID=65091)
Where ItemID=65091
Update Items
Set Num = (Select Sum(Num) from sizes Where ItemID=58401)
Where ItemID=58401
Update Items
Set Num = (Select Sum(Num) from sizes Where ItemID=65092)
Where ItemID=65092


Наверх

Титульная страница Поиск, карта сайта Написать письмо