MySQL 批量修改某一列的值為另外乙個欄位的值

2022-03-18 20:27:16 字數 1438 閱讀 6826

mysql> select * from fruit;

+----+--------+-------+

| id | name | price |

+----+--------+-------+

| 2 | banana | 0 |

| 3 | orange | 0 |

| 4 | mango | 0 |

| 5 | pomelo | 0 |

+----+--------+-------+

5 rows in set (0.00 sec)

要求很簡單,將上面fruit表的price列的值改為id列的值,比如第一條記錄的price改成1(對應id)。

剛開始,我很天真的這樣想:

1、用php或者其他的將所有記錄都取出來

2、然後每一條記錄,單獨修改一次

這樣就存在乙個問題,效率並不高,首先,發請求、等待資料庫執行,然後在迭代下一條記錄。

然後換了一種方法,就是下面這個語句:

mysql> update fruit a set price = (select id from fruit b where a.id = b.id);

其實sql語句寫的特別明白,意思也沒問題,但是,mysql不支援更改一種表,這種表就是在from子句中的表。

所以,上面報錯資訊如下:

error 1093 (hy000): you can't specify target table 'a' for update in from clause

直接更新price=id  

mysql> update fruit set price=id;

query ok, 5 rows affected (0.00 sec)

rows matched: 5 changed: 5 warnings: 0

mysql> select * from fruit;

+----+--------+-------+

| id | name | price |

+----+--------+-------+

| 2 | banana | 2 |

| 3 | orange | 3 |

| 4 | mango | 4 |

| 5 | pomelo | 5 |

+----+--------+-------+

5 rows in set (0.00 sec)

首先,我們在平常的update、insert、where篩選中,如果值的型別是字串型,那麼我們通常會使用引號將其括起來,但是我們並沒有將欄位名括起來。

在上面這一條命令中,set price=id,其實id也是欄位名,並不是id的值。更新的時候,會自動取出其中的值來進行更新。

MySQL 某一列累加

形如這樣的 利用變數 sumsalary sumsalary salary,進行累加,但是別忘記初始化變數 select sumsalary 0 來個例項,某客網的mysql題目 60 按照salary的累計和running total,其中running total為前n個當前 to date 9...

mysql update更新某一列為另一列

update sys user set new field old field 將同乙個表中兩個型別一樣的字段的值互換 update t user u1,t user u2 set u1.signed time u2.create time,u2.create time u1.signed time...

mysql將一列資料累加 MySql某一列累計查詢

問題 有一列資料,需要累計顯示出來 比如 id salary 查詢結果 id salary sumsalary 1 10000 1 10000 10000 2 20000 2 20000 30000 3 30000 3 30000 60000 解決方案 1 使用自定義變數 用 set 定義變數 my...