Как я могу обновить запись так же, как и другую запись в той же таблице? [Дубликат]

0

У меня есть таблица вроде этого:

// 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

Как я могу это сделать?

Теги:

2 ответа

0
Лучший ответ

Вы можете либо обмануть 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  

Демо здесь

2

Вы должны присоединиться к одной таблице с псевдонимом:

UPDATE names as t1
INNER join (select name from names where id = 1) t2
SET t1.name = t2.name
WHERE t1.id = 2
  • 0
    Кстати, это должен быть принятый ответ, потому что размещен раньше по сравнению с другим
  • 0
    Спасибо, приятель, но Giorgos ответ более полный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню