更新行内容,从另一个表中的行添加值

时间:2015-03-06 21:39:33

标签: database sqlite

我已经尝试过这里的所有事情: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查询为我提供了更新所需的所有数据,也没有成功。

1 个答案:

答案 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)

DEMO