更改列的值顺序

Change the value order of a column

我创建了一个 table,但插入了错误的值。实际的 table 要长得多,但这就足够了:

id salary
1 100
2 200
3 400
4 300

我想更改 salary 列所有值的顺序。所以基本上:

id salary
1 300
2 400
3 200
4 100

截至目前,table 不受任何限制。我需要使用什么查询才能使用子查询更改列值的顺序(这样我就不必手动更新所有值)?数据只需要倒序即可。

我想到了这样的查询,但它不起作用:

UPDATE `t1` 
SET `Salary` = 
    (SELECT `Salary` 
    FROM `t1`
    WHERE `t1`.`id` = `t1`.`id`
    ORDER BY `Salary` DESC);

查询应该是什么样的?

(我正在使用 MySQL 5.7)

Fisz 您需要第二个 table 新数据,如果不更改,则并非所有 ID 都必须存在。 由于您无法提供定义薪水 oddr 的算法,因此您需要第二个 table,您可以填充它。

我在这里使用了一个临时的table,它将0只存在于会话中,但是你可以使用一个固定的table,你截断(删除所有行)然后填充

CREATE TEMPORARY TABLE temtable (
  `id` INTEGER,
  `salary` INTEGER
);

INSERT INTO temtable
  (`id`, `salary`)
VALUES
  ('1', '300'),
  ('2', '400'),
  ('3', '200'),
  ('4', '100');
CREATE TABLE origtable (
  `id` INTEGER,
  `salary` INTEGER
);

INSERT INTO origtable
  (`id`, `salary`)
VALUES
  ('1', '100'),
  ('2', '200'),
  ('3', '400'),
  ('4', '300');
UPDATE origtable o
INNER JOIN  temtable t ON t.id = o.id
SET o.salary = t.salary
SELECT * FROM origtable
id | salary
-: | -----:
 1 |    300
 2 |    400
 3 |    200
 4 |    100
DROP TABLE temtable

db<>fiddle here