我有一個我創建但插入了錯誤值的表。實際的表要長得多,但這就足夠了:
| ID | 薪水 |
|---|---|
| 1 | 100 |
| 2 | 200 |
| 3 | 400 |
| 4 | 300 |
我想更改列的所有值的順序salary。所以基本上:
| ID | 薪水 |
|---|---|
| 1 | 300 |
| 2 | 400 |
| 3 | 200 |
| 4 | 100 |
截至目前,該表未系結任何約束。我需要使用什么查詢才能使用子查詢更改列值的順序(這樣我就不必手動更新所有值)?資料必須以相反的順序排列。
我想到了這樣的查詢,但它不起作用:
UPDATE `t1`
SET `Salary` =
(SELECT `Salary`
FROM `t1`
WHERE `t1`.`id` = `t1`.`id`
ORDER BY `Salary` DESC);
查詢應該是什么樣子?
(我正在使用 MySQL 5.7)
uj5u.com熱心網友回復:
Fisz,您需要第二個包含新資料的表,如果它們不更改,則并非所有 id 都必須存在。由于您無法提供定義工資 odrdr 的演算法,因此您需要一個可以填充的第二個表。
我在這里使用了一個臨時表,它將 0 僅存在于會話中,但您可以使用一個固定表,您可以截斷(洗掉所有行)然后填充
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編號 | 薪水 -: | -----: 1 | 300 2 | 400 3 | 200 4 | 100
DROP TABLE temtable
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/453099.html
上一篇:在SQL中查找具有條件的列的總和
