【发布时间】:2025-12-17 11:40:01
【问题描述】:
* 更新、澄清问题和示例
我有一个表,其中的数据表示为链表
即:
ID|FROM_STATE|TO_STATE|SOME_OTHER_COLUMN
我需要改变“指针”来移除 BAR 的状态。正如您在下面看到的,foo 进入 bar,bar 进入 com 等等。我希望 foo 直接进入 com,然后从 QUAX 进入 FIZZ。此外,需要从要删除的记录中提取“SOME_OTHER_COLUMN”的值,并在要更新的记录中使用该值代替“SOME_OTHER_COLUMN”的值。
来自
ID|FROM_STATE|TO_STATE|SOME_OTHER_COLUMN
1| FOO | BAR | xxx
1| BAR | COM | zzz
2| QUAZ | BAR | aaa
2| BAR | FIZZ | bbb
到:
ID|FROM_STATE|TO_STATE|SOME_OTHER_COLUMN
1| FOO | COM | zzz
2| QUAX | FIZZ | bbb
我首先编写了一个 self join 并尝试了类似的东西:
update
FOO a
join FOO b
on a.ID = b.ID
and a.FROM_STATE = b.FROM_STATE
set a.TO_STATE = b.TO_STATE
where b.FROM_STATE='BAR'
and a.TO_STATE='BAR';
这不起作用,没有更改任何行。
我在下面的 SQLFilldle 中设置了我的表。任何帮助表示赞赏。 DB是oracle(没有版本)
【问题讨论】:
-
根据你的描述结果:
1| FOO | BAR | xxx实际上应该是1| FOO | COM | xxx??? -
所有ID都等于1,a.FROM_STAGE可能是a.FROM_STATE?
-
@AaronLS,是的,这是一个错字。感谢收看