*更新,澄清的问题和示例
我有一个表格,其数据表示为链接列表
即:
ID | FROM_STATE | TO_STATE | SOME_OTHER_COLUMN
我需要更改“指针”以删除BAR的状态。正如你在下面看到的那样,foo去吧,酒吧去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
TO:
ID|FROM_STATE|TO_STATE|SOME_OTHER_COLUMN
1| FOO | COM | zzz
2| QUAX | FIZZ | bbb
我开始编写自我加入并尝试类似:
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(没有版本)
答案 0 :(得分:0)
您需要2次查询,更新和删除。
UPDATE tbl t SET (To_State,SomeColumn) =
(SELECT To_State, SomeColumn
FROM tbl
WHERE From_State = t.To_State
AND Id = t.Id)
WHERE To_State = ?
AND Id = ?;
DELETE FROM tbl
WHERE From_State = ?
AND Id = ?;
答案 1 :(得分:0)
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 = a.TO_STATE;