2016-07-23 96 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

相關問題