我有这张桌子:
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;
我试图通过一个查询来实现它
答案 0 :(得分:2)
试试这段代码,我没有经过测试,但我认为它可行:
UPDATE table
SET GroupOrder =
CASE
WHEN GroupOrder = 2 THEN 3
WHEN GroupOrder = 3 THEN 2
ELSE GroupOrder
END
WHERE GroupOrder = 2 OR GroupOrder = 3;
答案 1 :(得分:0)
这会有用吗?
SET GroupORDER = -1 WHERE GroupORDER = 2;
SET GroupORDER = 2 WHERE GroupORDER = 3;
SET GroupORDER = 3 WHERE GroupORDER = -1;
答案 2 :(得分:0)
您可以使用id
指定要更新的行:
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
子句。