MySQL - 更新与选择查询

问题描述:

表:子网和位置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

嗯,是的,看到它:您无法选择和更新同一个表。下面的答案解决了它。 –

你可以使用一个加入

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

非常感谢你的所有,行之有效! 我现在有另外一种情况:

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.

我在创建查询时遇到了问题。

随意问我是否需要更多信息。

谢谢你的帮助。

回答你的第二个问题。 (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'