【发布时间】:2016-01-25 01:50:58
【问题描述】:
有 3 个表 - 1 个父级和 2 个子级(子 PK 对父 PK 具有 FK) 我需要更新所有 3 个表中的一些列,其中一个“位置”取决于更新列。因此,在一个事务中将有 3 个更新语句,但第一个更新更改列并且“位置”被篡改(对于最后两个更新)。 有没有解决这个问题的通用方法?
比如有表
figure(id, name) -- parent table
shape(id, shape) -- shape.id reference to figure.id
color(id, color) -- color.id reference to figure.id
我想将红色矩形更新为绿色方块,这意味着:
UPDATE shape SET shape.shape = 'square'
WHERE shape.id = (SELECT id FROM shape
INNER JOIN color ON color.id = shape.id
WHERE shape.shape ='rectangle'
AND color.color = 'red');
UPDATE color SET color.color = 'green'
WHERE color.id = (SELECT id FROM shape
INNER JOIN color ON color.id = shape.id
WHERE shape.shape ='rectangle'
AND color.color = 'red');
但在第一次更新后没有任何“红色矩形”,因为它们变成了“方形”
所以,问题是:我是否必须创建一个临时表来选择 ids 并执行更新,还是有其他常见的方法?
【问题讨论】:
-
一点都不清楚,给我们表结构,输入和想要的输出
-
添加到@sagi sais 的内容:在您的问题中包含您的查询并使用代码示例按钮
{}正确格式化它们 -
“我是否必须创建一个临时表来选择 id 并执行更新” > 是。您希望我在答案中输入这是如何完成的,还是您可以自己解决?
-
您使用的是哪个 DBMS?
标签: sql sql-update