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

來源:互聯網
上載者:User

標籤:warnings   資料   error   執行   ora   0.00   spec   from   set   

mysql> select * from fruit;+----+--------+-------+| id | name   | price |+----+--------+-------+|  1 | apple  |     0 ||  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: 0mysql> select * from fruit;+----+--------+-------+| id | name   | price |+----+--------+-------+|  1 | apple  |     1 ||  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 批量修改某一列的值為另外一個欄位的值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.