Страница 1 из 1
MySQL вопрос
Добавлено: 01 окт 2009, 11:59
Stanislav
Есть у меня таблица. В таблице есть поле "идентификатор списка рассылки - list_id". Я его хочу поменять для некоторых записей таблицы.
Эти некоторые записи я вычисляю с помощью подзапроса. Короче, должно работать вот так:
Код: Выделить всё
UPDATE newsletter.clients_lists cl SET cl.`list_id` = 54
WHERE cl.`id` IN ( SELECT c.`id`
FROM newsletter.clients_lists c INNER JOIN newsletter.snd_users s
ON c.`client_id` = s.`id`
WHERE c.`list_id` = 53 AND s.`email1` like '%yahoo.ca' );
MySQL выпендривается - говорит, нельзя делать FROM и UPDATE одновременно:
You can't specify target table 'cl' for update in FROM clause
Как побороть?
Re: MySQL вопрос
Добавлено: 01 окт 2009, 13:02
папа Карло
Код: Выделить всё
update c
set
`list_id` = 54
from
newsletter.clients_lists c INNER JOIN newsletter.snd_users s ON c.`client_id` = s.`id`
WHERE c.`list_id` = 53 AND s.`email1` like '%yahoo.ca';
вот так не работает? или вот так:
Код: Выделить всё
update newsletter.clients_lists
set
`list_id` = 54
from
newsletter.clients_lists c INNER JOIN newsletter.snd_users s ON c.`client_id` = s.`id`
WHERE c.`list_id` = 53 AND s.`email1` like '%yahoo.ca';
Re: MySQL вопрос
Добавлено: 01 окт 2009, 13:06
Stanislav
Минуточку!
А UPDATE не имеет параметра FROM !
Код: Выделить всё
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Re: MySQL вопрос
Добавлено: 01 окт 2009, 13:45
Mel'nik
Там вроде такое было в версии 4
It is not currently possible to modify a table and select from the same table in a subquery.
скореее всего так и осталось. Сделай темп таблицу с результатами сабселекта а потом апдейть первую с сабселектом из темп.
Re: MySQL вопрос
Добавлено: 01 окт 2009, 13:47
Stanislav
Mel'nik писал(а):Там вроде такое было в версии 4
It is not currently possible to modify a table and select from the same table in a subquery.
скореее всего так и осталось. Сделай темп таблицу с результатами сабселекта а потом апдейть первую с сабселектом из темп.
Это-то понятно... Я думал есть какое-то магическое слово или можно как-то по особенному щелкнуть пальцами и все заработает...

Re: MySQL вопрос
Добавлено: 01 окт 2009, 14:39
Mel'nik
Ну если только магическое TEMPORARY когда делаеш таблицу

Типа CREATE TEMPORARY bli.bla SELECT ....
Re: MySQL вопрос
Добавлено: 01 окт 2009, 17:07
badreyka
попробуи так
Код: Выделить всё
UPDATE newsletter.clients_lists cl
SET cl.`list_id` = 54
WHERE c1.`list_id` = 53
AND EXISTS (SELECT 1 FROM newsletter.snd_users s
WHERE c1.`client_id` = s.`id`
AND s.`email1` like '%yahoo.ca' );
в Оракле работает
)
Re: MySQL вопрос
Добавлено: 01 окт 2009, 17:28
папа Карло
ну тогда через жопу примерно вот так....
Код: Выделить всё
update mytable set mycol = myval where myid in (select whateverid from tab1 t1 join tab2 t2 on t1.asdf = t2.adaa where ....);
такое работает?