MySQL 批量修改某一列的值為另外一個字段的值


MySQL 批量修改某一列的值為另外一個字段的值

 
1
2
3
4
5
6
7
8
9
10
11
mysql>  select  from  fruit;
+ ----+--------+-------+
| id |  name    | price |
+ ----+--------+-------+
|  1 | apple  |     0 |
|  2 | banana |     0 |
|  3 | orange |     0 |
|  4 | mango  |     0 |
|  5 | pomelo |     0 |
+ ----+--------+-------+
rows  in  set  (0.00 sec)

  

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

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

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

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

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

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

1
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  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 |
+ ----+--------+-------+
|  1 | apple  |     1 |
|  2 | banana |     2 |
|  3 | orange |     3 |
|  4 | mango  |     4 |
|  5 | pomelo |     5 |
+ ----+--------+-------+
rows  in  set  (0.00 sec)

  

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM