【问题标题】:Update rows content adding values from rows in another table更新行内容从另一个表中的行添加值
【发布时间】:2015-03-07 05:54:11
【问题描述】:

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

【问题讨论】:

标签: database sqlite


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 2019-04-16
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2019-03-13
    相关资源
    最近更新 更多