Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
dp_cmb
Зарегистрирован: 25.12.2006 Сообщения: 1
|
Добавлено: Пн Дек 25 2006 14:14 Заголовок сообщения: Update table set= where - MySQL не работает |
|
|
Люди помогите, все голову сломал, не работает след update:
update disaload set susp='y' where num=(select disaload.num from disaload,disasusp where disaload.num=disasusp.num);
пишет след. ошибку:
ERROR 1064: You have an error in your SQL syntax near 'select disaload.num from disaload,disasusp where disaload.num=disasusp.num)' at line 1 |
|
Вернуться к началу |
|
 |
mad_alexx
Зарегистрирован: 14.01.2005 Сообщения: 154 Откуда: Иркутск
|
Добавлено: Пн Дек 25 2006 15:01 Заголовок сообщения: |
|
|
В одном запросе нельзя читать и обновлять данные одной таблицы. Нужно либо выполнять последовательно два запроса, либо создать временную таблицу копированием существующей и выбирать данные уже из неё |
|
Вернуться к началу |
|
 |
Alex_pm
Зарегистрирован: 26.08.2006 Сообщения: 55
|
Добавлено: Пт Дек 29 2006 01:10 Заголовок сообщения: |
|
|
Если я правильно понял, тебе нужно такое:
update disaload set susp='y' where EXISTS(select * from disasusp where disaload.num=disasusp.num); |
|
Вернуться к началу |
|
 |
kirchatykh
Зарегистрирован: 19.01.2007 Сообщения: 8
|
Добавлено: Пт Янв 19 2007 16:50 Заголовок сообщения: |
|
|
мне кажется оператор IN тоже подойдёт (так же как и EXIST) |
|
Вернуться к началу |
|
 |
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Сб Янв 20 2007 19:40 Заголовок сообщения: |
|
|
mad_alexx писал(а): | В одном запросе нельзя читать и обновлять данные одной таблицы. Нужно либо выполнять последовательно два запроса, либо создать временную таблицу копированием существующей и выбирать данные уже из неё |
Вообще-то, это зависит от компилятора СУБД. Если компилятор использует алгоритм, при котором сначала определяется список обновляемых записей с обновляемыми значениями (либо это компилятору можно подсказать), тогда можно. В частности, в MSSQL заданную задачу можно решить так:
Код: | update DL set susp='y' from disasusp as DL inner join disasusp on DL.num=disasusp.num |
-------------
kirchatykh писал(а): | мне кажется оператор IN тоже подойдёт (так же как и EXIST) |
Решение Alex_pm'а правильное (и самое естественное), а поправка kirchatykh нет. |
|
Вернуться к началу |
|
 |
Suslov
Зарегистрирован: 08.03.2006 Сообщения: 67
|
Добавлено: Чт Мар 08 2007 01:31 Заголовок сообщения: |
|
|
Ну и как удалось решить? По-моему в my не работает соединение таблиц и запрос в запросе или не так? |
|
Вернуться к началу |
|
 |
|