我有这张桌子:
我想更新列qazxsw poi以确定子查询所有记录的距离qazxsw poi
这是预期的结果:
到目前为止,我已经完成了这项工作,但我不明白如何在单个查询中为每一行进行更新
Distance
问题:如果我想要第二条记录,其中ownerid是相同的,如上面的屏幕截图所有者ID是9690,距离pe 0.000而不是72.841,我该如何修改查询?
据推测,您需要一个相关的子查询。我猜:
where name='drive_through'
您有两种选择:
A.关联子查询。这意味着添加一行将您正在更新的行连接到子查询中的一行(因为当前子查询将返回许多行,因此错误):
UPDATE Action
SET [distance] = (SELECT [distance]
FROM Action
WHERE [name] = 'travel')
WHERE [name] = 'drive_through'
B.使用联接
UPDATE Action
SET [distance] = (SELECT SUM([distance])
FROM Action a2
WHERE [name] = 'travel' AND a2.ownerID = Action.ownerId
)
WHERE [name] = 'drive_through';
一种可能的解决方案是使用JOIN与同一个表的另一个实例。
UPDATE A
SET [distance] = (SELECT DISTINCT [distince]
FROM Action A2
WHERE [name] = 'Travel'
AND A.ownerID = A2.ownerID) --Here
FROM Action A
WHERE [name] = 'drive_through'