MySQL交换顺序多行

时间:2014-12-21 20:35:40

标签: 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       |    

我想在两个组之间交换一个查询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;

我试图通过一个查询来实现它

3 个答案:

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

这会有用吗?

  1. SET GroupORDER = -1 WHERE GroupORDER = 2;

  2. SET GroupORDER = 2 WHERE GroupORDER = 3;

  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子句。