我已经尝试过这里的所有事情:Update rows from another table 没有成功。
我正在使用SQLite,我正在使用SQLite数据库浏览器执行查询。
我有3个表Off,Vio和Loc,数据类似
Off(Aid,ox,oy):
0 0 0
1 100 100
2 200 200
Vio(Vid,Aid):
0 0
1 1
2 2
3 1
Loc(vid,x,y):
0 1 2
1 5 6
2 9 1
2 2 3
3 4 4
Aid是Off中的主键和Vio中的外键。 Vid是Vio中的主键和Loc中的外键。
我想更新Loc行,将正确的ox和oy添加到x和y值以得到这样的结果:
"updated" Loc(vid,x,y)
0 1 2
1 105 106
2 209 201
2 202 203
3 104 104
我试过这个:
WITH CTE AS (
SELECT Loc.x, Loc.y, Off.ox AS offx, Off.oy AS offy
FROM Loc, Vio, Off
WHERE Vio.Aid=Off.Aid AND Vio.vid=Loc.vid
)
UPDATE CTE
SET x= x + offx, y= y + offy
而且:
UPDATE Loc, Off
SET x=x+Off.ox, y=y+Off.oy
FROM (
SELECT Off.ox, Off.oy
FROM Loc, Vio, Off
WHERE Vio.Aid = Off.Aid AND Vio.vid=Loc.vid
)
在SQLite数据库浏览器中,即使SELECT查询为我提供了更新所需的所有数据,也没有成功。
答案 0 :(得分:1)
如重复问题所述,您必须使用相关子查询。由于您要更新两列,因此需要为每个列使用子查询:
UPDATE Loc
SET x = (
SELECT L1.x + Off.ox
FROM Loc l1
JOIN Vio ON L1.vid = Vio.vid
JOIN Off ON Vio.Aid = Off.Aid
WHERE Loc.vid = l1.vid),
y = (
SELECT L1.y + Off.oy
FROM Loc l1
JOIN Vio ON L1.vid = Vio.vid
JOIN Off ON Vio.Aid = Off.Aid
WHERE Loc.vid = l1.vid)