У меня есть таблица вроде этого:
// names
+----+-------+
| id | name |
+----+-------+
| 1 | jack |
| 2 | |
+----+-------+
И вот ожидаемый результат:
// names
+----+-------+
| id | name |
+----+-------+
| 1 | jack |
| 2 | jack |
+----+-------+
И вот мой запрос:
update names set name = ( select name from names where id = 1 ) where id = 2
Но это бросает:
ОШИБКА 1093 (HY000): вы не можете указывать имена имен целевой таблицы для обновления в предложении FROM
Как я могу это сделать?
Вы можете либо обмануть MySQL, вложив подзапрос:
update names
set name = select name from ( select name from names where id = 1 ) as t
where id = 2
или вы можете использовать CROSS JOIN
:
UPDATE names n
CROSS JOIN (
SELECT name FROM names WHERE id = 1) AS t
SET
n.name = t.name
WHERE id = 2
Вы должны присоединиться к одной таблице с псевдонимом:
UPDATE names as t1
INNER join (select name from names where id = 1) t2
SET t1.name = t2.name
WHERE t1.id = 2