多行MySQL交换顺序
我有这张桌子:多行MySQL交换顺序,mysql,swap,Mysql,Swap,我有这张桌子: ID | Name | GroupORDER | 1 | John | 1 | 2 | Ben | 2 | 3 | Joe | 2 | 4 | Paul | 2 | 5 | Anna | 2 | 6 | Tash | 3 | 7 | Ryan | 3
ID | Name | GroupORDER |
1 | John | 1 |
2 | Ben | 2 |
3 | Joe | 2 |
4 | Paul | 2 |
5 | Anna | 2 |
6 | Tash | 3 |
7 | Ryan | 3 |
我想用一个查询在两个组之间交换GroupORDER,并得到以下结果:
ID | Name | GroupORDER |
1 | John | 1 |
6 | Tash | 2 |
7 | Ryan | 2 |
2 | Ben | 3 |
3 | Joe | 3 |
4 | Paul | 3 |
5 | Anna | 3 |
有什么想法吗?
类似这种完全错误的查询:
UPDATE table SET GroupORDER = 2
WHERE GroupORDER = 3 AND GroupORDER = 3 WHERE GroupORDER = 2;
我正试图通过一个查询实现这一点这行吗
您可以使用
id
s指定要更新的行:
UPDATE table
SET GroupORDER = 3
WHERE ID in (4, 5);
或者,如果名称足够:
UPDATE table
SET GroupORDER = 3
WHERE name in ('Paul', 'Anna');
编辑:
实际上,您可以使用limit
,做您想做的事情:
UPDATE table
SET GroupORDER = 3
WHERE GroupORDER = 2
ORDER BY id DESC
LIMIT 2;
如果您不关心更新哪两行,可以删除
order by
子句。试试这段代码,我没有测试过,但我认为它可以工作:
UPDATE table
SET GroupOrder =
CASE
WHEN GroupOrder = 2 THEN 3
WHEN GroupOrder = 3 THEN 2
ELSE GroupOrder
END
WHERE GroupOrder = 2 OR GroupOrder = 3;
这将用“3”替换所有的“2”,这似乎不是问题的目的。这是一种方法,但我更愿意对mySql进行一次查询。这不是问题所在。我想要一个仅使用groupORDER作为参考的解决方案(相同的case语句可以在SELECT中使用,以在不更改数据的情况下给出所需的结果)。