我有一张表(简化),如下所示:
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
答案 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}}。