使用自引用列更新MySQL表

时间:2016-07-23 08:55:43

标签: mysql self-reference self-referencing-table

我有一张表(简化),如下所示:

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

selfreference列指的是同一个表的id号。在上面的例子中,Wien和Виена都指的是同一个城市,因此他们的自引用列的值应该等于1.

换句话说,我需要做一些像

这样的事情
 update `places` 
 set `places`.`selfreference` = 
 (select `places`.`id` from `places`where `places`.`name` = `places`.`selfreference-name`)

但上面的SELECT语句显然是错误的。我不知道如何继续。

任何提示都将不胜感激。

一切顺利, 丁鲷

编辑:所需的输出如下所示:

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

2 个答案:

答案 0 :(得分:1)

你可能需要自我加入

chekc with select

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`;

答案 1 :(得分:0)

以下查询完成工作:

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

p2 - >表places的实例将更新。

p1 - >表格places的实例来自匹配id的{​​{1}}。

WORKING DEMO BEFORE UPDATING

WORKING DEMO AFTER UPDATING