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

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

Опять избавление от вложенного запроса. На этот раз внутри UPDATE [MySQL]


VictorT ©   (2004-02-18 16:24:00) 

Нужно переформулировать такой запрос:
update firm_ref set sourceid=13 where firm_ref.regnum in (select distinct exhibitionfirms.regnum from exhibitionfirms)


VictorT   (2004-02-18 17:49:00) [1]


> в попытке избавиться от вложенного запроса в данном случае.

Дак я бы и не избавлялся, если бы это работало. Но в MySQL со вложенным не проходит.


Val   (2004-02-18 17:36:00) [2]

>VictorT ©   (18.02.04 17:01) [11]
в попытке избавиться от вложенного запроса в данном случае.


VictorT   (2004-02-18 17:32:00) [3]


> Там и делете такое [4] упомянут,

хм... действительно... а в моём мануале этого нет...

> и про апдейт исчерпывающе написано

То же, что и в моём мануале. Если действительно исчерпывающе (ничего не упущено), то наверно придётся всё-таки делать апдейт в цикле :(


Johnmen   (2004-02-18 17:19:00) [4]

>VictorT ©   (18.02.04 17:14) [13]

Хм... Там и делете такое [4] упомянут, и про апдейт исчерпывающе написано...:)


VictorT   (2004-02-18 17:14:00) [5]


> Johnmen ©   (18.02.04 17:05) [12]

B где там решение моей проблемы?


Johnmen   (2004-02-18 17:05:00) [6]

Врешь ты всё... В Описании всё четко описано...
http://soft.org.ua/docs/mysql/ru/UPDATE.html


VictorT   (2004-02-18 17:01:00) [7]


> Не вижу смысла, честно говоря...

Не видишь смысла в чём?


VictorT   (2004-02-18 16:57:00) [8]


> Ну ясен пень, в доку по майэскуэльному SQL синтаксису глянуть
> лень...:(

В том то и дело, не описано там такого...
Вот к примеру описание DELETE:

DELETE FROM table_name WHERE where_definition

Здесь where_definition имеет формат:

where_definition:
 where_expr or where_expr [AND | OR] where_expr

where_expr имеет формат:

where_expr:
 column_name [> | >= | = | <> | <= | < ]
 column_name_or_constant or
 column_name LIKE column_name_or_constant or
 column_name IS NULL or column_name IS NOT NULL or (where_definition)


и при этом проканывает такой запрос:
delete table1 from table1, table2 where table1.field1 = table2.field1
хотя он и не стыкуется с описанием.

Подумал, мож и с UPDATE есть что-то недокументированное...
Вот его описание:

UPDATE table SET column=expression,... WHERE where_definition

Здесь where_definition:

where_definition:
 where_expr or where_expr [AND | OR] where_expr

Здесь where where_expr имеет формат:

where_expr:
 column_name [> | >= | = | <> | <= | < ]
 column_name_or_constant or
 column_name LIKE column_name_or_constant or
 column_name IS NULL or column_name IS NOT NULL or (where_definition)


VictorT   (2004-02-18 16:52:00) [9]


> Guest   (18.02.04 16:33) [5]

Не проканывает.

> такой синтаксис проходит в MySQL?

С UPDATE не прошёл, а тот, что я привёл с DELETE, проходит. Кстати, я вообще не видел такого синтаксиса ни в SQL вообще (языка), ни в описании MySQL в частности. Сам удивился, когда мне предложили так попробовать с DELETE, но оказалось, работает.


Johnmen   (2004-02-18 16:48:00) [10]

Ну ясен пень, в доку по майэскуэльному SQL синтаксису глянуть лень...:(


Guest   (2004-02-18 16:41:00) [11]

[6] Val ©   (18.02.04 16:40)

Откуда я знаю? :)
Я просто предположил, что он мог бы быть таким. По аналогии.


Val   (2004-02-18 16:40:00) [12]

>Guest   (18.02.04 16:33) [5]
такой синтаксис проходит в MySQL?
>VictorT ©   (18.02.04 16:32) [4]
Не вижу смысла, честно говоря...


Guest   (2004-02-18 16:33:00) [13]

update table1 from table1, table2 set field2=13 where table1.field1 = table2.field1?


VictorT   (2004-02-18 16:32:00) [14]


> 1. Менять СУБД.

Нет возможности.

> 2. Курсор по select distinct regnum from exhibitionfirms
> с выполнением внутри него update firm_ref set sourceid=13
> where regnum=?

Так и собирался сделать в случае, если не найду лучшего решения.

К примеру запрос:
delete from table1
where field1 in (select field1 from table2)

удалось заменить на:
delete table1 from table1, table2 where table1.field1 = table2.field1

Может нечто подобное можно и для UPDATE...


Guest   (2004-02-18 16:29:00) [15]

[2] asp ©   (18.02.04 16:27)

MySQL и Exists не поддерживает IIRC.


Guest   (2004-02-18 16:27:00) [16]

1. Менять СУБД.
2. Курсор по select distinct regnum from exhibitionfirms
с выполнением внутри него update firm_ref set sourceid=13 where regnum=?


asp   (2004-02-18 16:27:00) [17]

Переформулируй на EXISTS...


Наверх

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