2016-07-23 114 views
2

我有一个表(简体):更新一个MySQL表看起来像这样自引用列

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

的selfreference列指的是同一个表的ID号。在上面的例子中,维也纳和Виена都指向同一个城市,所以他们selfreference列的值应等于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 
+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 设置b.''''''''''''''''' – Tench

+0

@Tench谢谢..我有更新答案。 。与适当的别名.. – 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的实例,其中匹配selfreference-nameid被拍摄。

WORKING DEMO BEFORE UPDATING

WORKING DEMO AFTER UPDATING

相关问题