2016-07-23 3 views
2

У меня есть таблица (упрощенная), который выглядит следующим образом:Обновление таблицы MySQL с автореферентным колонке

колонка
id  | name | selfreference | selfreference-name 
------ | -------| --------------| ------------------ 
1  | Vienna |    | 
2  | Wien |    | Vienna 
3  | Виена |    | Vienna 

selfreference относится к идентификационным номерам той же таблица. В приведенном выше примере, как Вена и Виена относятся к одному городу, поэтому значение их столбца selfreference должен быть равен 1.

Другими словами, мне нужно сделать что-то вроде

update `places` 
set `places`.`selfreference` = 
(select `places`.`id` from `places`where `places`.`name` = `places`.`selfreference-name`) 

но Вышеприведенный оператор SELECT явно ошибочен. Я не понимаю, как действовать.

Любые советы были бы весьма признательны.

Все лучшее, линь

Edit: желаемый результат будет выглядеть следующим образом:

id  | name | selfreference | selfreference-name 
------ | -------| --------------| ------------------ 
1  | Vienna |    | 
2  | Wien | 1   | Vienna 
3  | Виена | 1   | Vienna 
+1

показать правильный образец результата вы хотите получить – scaisEdge

ответ

1

Может быть, вам нужно автообъединение

chekc с выбора

select a.*, b.* 
from `places` as a 
inner join `places` as 
set b.`selfreference` = a.`id` 
where b.`name` = a.`selfreference-name`; 

, а затем, если запрос выше даст вам правильный результат

update `places` as a 
inner join `places` as 
set b.`selfreference` = ab.`id` 
where b.`name` = a.`selfreference-name`; 
+0

на самом деле, это наоборот, но я действительно не мог бы сделать это без вас. обновлять места как локальные места как b set b.'selfreference' = a.'id' где b.'selfreference-name' = a.'name' – Tench

+0

@Tench thanks .. у меня есть ответ. . с правильным псевдонимом .. – scaisEdge

+0

Почему downvoting .. для правильного ответа ..? – scaisEdge

0

Следующий запрос делает работу:

UPDATE places p1 
INNER JOIN places p2 ON p1.`name` = p2.`selfreference-name` 
SET p2.selfreference = p1.id; 

p2 -> экземпляр таблицы places, который будет обновляться.

p1 -> экземпляр таблицы places, откуда id соответствует selfreference-name.

WORKING DEMO BEFORE UPDATING

WORKING DEMO AFTER UPDATING