使用mysql在两个不同的行中交换“两个”列值

时间:2014-02-21 22:23:36

标签: mysql sql

我有两行,每行包含一天一周和一个事件。自动增量主键用于区分行。

以下是一个例子:

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;

有人可以帮我换掉两列而不只是一列吗?

感谢

1 个答案:

答案 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;