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 ....
告诉我,如果你不明白的东西。
谢谢
你可以使用一个加入
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
谢谢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'
什么是行不通的?提供一些示例数据。 –
错误类似于以下内容: #1093 - 您无法在FROM子句中指定要更新的目标表'子网' – Stefey
嗯,是的,看到它:您无法选择和更新同一个表。下面的答案解决了它。 –