我有两行,每行包含一天一周和一个事件。自动增量主键用于区分行。
以下是一个例子:
ID Week Day event
-------------------------------
1 | 1 | 2 | house keeping
2 | 2 | 3 | house viewing
我想要做的是交换指定的两行的周和日,以便它看起来像这样:
ID Week Day event
-------------------------------
1 | 2 | 3 | house keeping
2 | 1 | 2 | house viewing
但Id 必须保持不变
我一直在阅读其他人的帖子,发现这个解决方案使用临时变量来交换每行中的一个列值。
UPDATE my_table SET a=@tmp:=a, a=b, b=@tmp;
有人可以帮我换掉两列而不只是一列吗?
感谢
答案 0 :(得分:2)
我假设你的桌子里只有两排。
如果没有,则需要稍微修改JOIN
条件。
这是一种可行的方法。
CREATE TEMPORARY TABLE T(ID int, Week int, Day int)
INSERT INTO T(ID, Week, Day)
SELECT ID, Week, Day from TableName;
UPDATE TableName t1
JOIN T t2 on t1.ID <> t2.ID
SET
t1.Week = t2.Week,
t1.Day = t2.Day;
DROP TEMPORARY TABLE T;
这是一个更好的。
UPDATE
tablename AS t1
JOIN tablename AS t2 ON
( t1.id <> t2.id )
SET
t1.week = t2.week,
t2.week = t1.week,
t1.day = t2.day,
t2.day = t1.day;