2

我有一个看起来像这样的表(简化):

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

自引用列指的是同一张表的 id 号。在上面的例子中,Wien 和 Виена 都指向同一个城市,所以它们的 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
4

2 回答 2

1

你可能需要一个自我加入

用选择检查

select a.*, b.*
from  `places` as a
inner join `places` as b

where b.`name` = a.`selfreference-name`;

然后如果上面的查询给你正确的结果

update `places` as a
inner join `places` as b
set b.`selfreference` =  ab.`id`
where b.`name` = a.`selfreference-name`;
于 2016-07-23T09:06:04.197 回答
0

以下查询完成了这项工作:

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

p2places->将被更新的表的实例。

p1places->从中id获取匹配项的表的实例selfreference-name

WORKING DEMO BEFORE UPDATING

WORKING DEMO AFTER UPDATING

于 2016-07-23T13:43:05.480 回答