我正在将数据库结构转换为另一个数据库结构。 ID有这个问题。用于通过ID引用彼此的项目 - 但这些ID 必须更改,因为新结构不同。
所以你有一张桌子(这是一个例子):
| id | ref |
+----+-----+
| 1 | 3 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
现在让我们说在新表中,ref
费用ID必须改变如下:
| old | new |
+-----+-----+
| 1 | 2 |
| 2 | 1 |
| 3 | 4 |
| 4 | 3 |
如果您随后UPDATE
将新的ref
替换为新的Replacing: 1=>2 Replacing: 2=>1 This is what we need at the end:
well, damn
| id | ref | | id | ref | | id | ref |
+----+-----+ +----+-----+ +----+-----+
| 1 | 3 | | 1 | 3 | | 1 | 4 |
| 2 | *2* | | 2 | 2 | | 2 | 2 |
| 3 | *2* | | 3 | 2 | | 2 | 2 |
| 4 | 2 | | 4 | *2* | | 2 | 1 |
,请看看会发生什么:
{{1}}
所以我需要一次更换它。我怎么能这样做?
答案 0 :(得分:0)
此更新全部在一条指令中
UPDATE t1 a
INNER JOIN t2 b
ON a.ref=b.old
SET a.ref=b.new;
结果
select * from t1
id ref
1 4
2 2
3 2
4 1
http://sqlfiddle.com/#!2/ab49c/1
架构和数据样本
create table t1 (id int, ref int);
create table t2 (old int, new int);
insert t1 values(1,3);
insert t1 values(2,1);
insert t1 values(3,1);
insert t1 values(4,2);
insert t2 values(1,2);
insert t2 values(2,1);
insert t2 values(3,4);
insert t2 values(4,3);
答案 1 :(得分:0)
由于标准无关紧要,因此可以解决问题。解决方案的核心是:一次更新所有行。
update YourTable
set ref =
case ref
when 1 then 2
when 2 then 1
when 3 then 4
when 4 then 3
end
如果不可能: