更改列的值顺序
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
我创建了一个 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