2017-06-29 213 views
1

表:子網和位置MySQL - 更新與選擇查詢

我想要做更新和選擇一個SQL查詢。我需要用另一個表中的信息來更新一些行,但是沒有任何東西可以實際加入這兩個表... 我遇到了一些困難。

這裏的查詢:

UPDATE subnets 
SET place = (SELECT locations.id FROM subnets, locations 
WHERE LEFT(locations.name,4) LIKE 
LEFT (subnets.description,4)) 
WHERE subnets.network='192.168.1.9'; 

我想獲得具有與我的第一個表中的列共有信息的第二表的id ....

告訴我,如果你不明白的東西。

謝謝

+0

什麼是行不通的?提供一些示例數據。 –

+0

錯誤類似於以下內容: #1093 - 您無法在FROM子句中指定要更新的目標表'子網' – Stefey

+0

嗯,是的,看到它:您無法選擇和更新同一個表。下面的答案解決了它。 –

回答

1

你可以使用一個加入

UPDATE subnets 
inner join locations on LEFT(locations.name,4) LIKE LEFT (subnets.description,4) 
    AND subnets.network='192.168.1.9' 
SET place = locations.id 
+0

謝謝scaisEdge的提示,明天早上我會試試,我會告訴你的! – Stefey

0

非常感謝你的所有,行之有效! 我現在有另外一種情況:

UPDATE subnets dt1, subnets dt2 
SET dt1.masterSubnetId = dt2.id 
WHERE LEFT(dt2.description,4) LIKE 'OF20' AND dt2.network='0'; 

我試圖做的是以下幾點: 我有一個列ID表子網,和列masterSubnetId。 我想更新一行的masterSubnetId的值來指定另一行的ID。例如,如果我有一行描述名爲FRANCE的子網,另一行描述名爲PARIS的子網,我希望PARIS將masterSubnetId值設置爲「FRANCE」子網的ID。 這兩個子網和行在同一個表中,所以我不認爲我必須加入任何東西...

這兩個條件是如果description字段的前4個字符是相等的,並且如果網絡值等於0.

我在創建查詢時遇到了問題。

隨意問我是否需要更多信息。

謝謝你的幫助。

0

回答你的第二個問題。 (https://stackoverflow.com/a/44843974/1000756)這是不完全清楚,如你提到的例子,然後條件,但也許你可以嘗試

update subnets as dt1 
inner join (
select id from subnets where subnetName = 'FRANCE') as dt2 
set dt1.masterSubnetid = dt2.id 
where dt1.subnetName = 'PARIS'