我有几个表,其中一个字段是优先级(1到5)。这里的问题是,不同的项目一直使用5作为最高,而1作为最高项目,我将协调这一点。
我的简单选择是创建临时表并复制数据并切换为此表:
1 - > 5
2 - > 4
3 - > 3
4 - > 2
5 - > 1
我对SQL不是那么好但是它觉得应该有一种简单的方法可以直接用语句切换这些值,但是我确实关注何时存在大量数据以及中途出现问题的方法然后数据将一团糟。
我应该使用临时表解决方案,还是应该有一种很好的方法在SQL中直接执行此操作? (正在使用Oracle 10g)
非常感谢!
答案 0 :(得分:13)
只需像这样更新第二个表,就不需要临时表,因为你只是颠倒了优先级:
update table_2
set priority = 6-priority;
答案 1 :(得分:4)
您可以使用CASE声明
case PRIORITY
when 5 then 1
when 4 then 2
when 3 then 3
when 2 then 4
when 1 then 5
else PRIORITY
end
编辑:texBlues的解决方案要好得多,但是我把它放在这里,以防数学不那么整洁。
答案 2 :(得分:0)
如果更新失败,请确保不会出现“混乱”,请使用事务。基于tekBlues解决方案(+1为此)。
START TRANSACTION;
update table_2
set priority = 6-priority;
...
COMMIT;
如果您想一次更新多个表,这尤其有效。正如hainstech在他的评论中正确指出的那样,单一陈述被明确处理。