1. 程式人生 > >Mysql 一條SQL語句實現批量更新資料,update結合case、when和then的使用案例

Mysql 一條SQL語句實現批量更新資料,update結合case、when和then的使用案例

如何用一條sql語句實現批量更新?mysql並沒有提供直接的方法來實現批量更新,但是可以用點小技巧來實現。

複製程式碼 程式碼如下:

UPDATE mytable SET 
myfield = CASE id 
        WHEN 1 THEN 'value'
        WHEN 2 THEN 'value'
        WHEN 3 THEN 'value'
END 
WHERE id IN (1,2,3);

這裡使用了case when 這個小技巧來實現批量更新。

舉個例子:

複製程式碼 程式碼如下:

UPDATE categories SET 
display_order = CASE
id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END WHERE id IN (1,2,3);

這句sql的意思是,更新display_order 欄位,如果id=1 則display_order 的值為3,如果id=2 則 display_order 的值為4,如果id=3 則 display_order 的值為5。
即是將條件語句寫在了一起。
這裡的where部分不影響程式碼的執行,但是會提高sql執行的效率。確保sql語句僅執行需要修改的行數,這裡只有3條資料進行更新,而where子句確保只有3行資料執行。

如果更新多個值的話,只需要稍加修改:

複製程式碼 程式碼如下:

UPDATE categories SET 
display_order = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
END, 
title = CASE id 
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
END
WHERE id IN (1,2
,3);

到這裡,已經完成一條mysql語句更新多條記錄了。但是要在業務中運用,需要結合服務端語言,這裡以php為例,構造這條mysql語句:

複製程式碼 程式碼如下:

$display_order = array( 
    1 => 4, 
    2 => 1, 
    3 => 2, 
    4 => 3, 
    5 => 9, 
    6 => 5, 
    7 => 8, 
    8 => 9 
); 

$ids = implode(',', array_keys($display_order)); 
$sql = "UPDATE categories SET display_order = CASE id "; 
foreach ($display_order as $id => $ordinal) { 
    $sql .= sprintf("WHEN %d THEN %d ", $id, $ordinal); 
} 
$sql .= "END WHERE id IN ($ids)"; 
echo $sql;

相關推薦

Mysql SQL語句實現批量更新資料update結合casewhenthen的使用案例

如何用一條sql語句實現批量更新?mysql並沒有提供直接的方法來實現批量更新,但是可以用點小技巧來實現。 複製程式碼 程式碼如下: UPDATE mytable SET myfield = CASE id WHEN 1 THEN

SQL語句實現查詢成績-6060~80+80的人數的方法

總結一下學到的一個SQL方法。下面我建立一個數據表: SELECT * FROM students; 可以看到資料表中存在六條資料,如果使用傳統的查詢方法,我們需要三條SQL語句,分別是: select count(*) from students where score<6

php中mysqlsql語句查詢出所有符合條件的資料該怎麼寫?

假如一個表裡有個classid欄位是類別的id,我想用一條sql語句查出classid=5的所有資料的id該怎麼查呢?正常是要迴圈,放到數組裡的吧 如圖,我想查詢classid=2的對應所有id,用

執行sql語句update記錄實現思路

如果你想更新多行資料,並且每行記錄的各欄位值都是各不一樣,你會怎麼辦呢?本文以一個示例向大家講解下如何實現如標題所示的情況,有此需求的朋友可以瞭解下       通常情況下,我們會使用以下SQL語句來更新欄位值: 複製程式碼 程式碼如下: UP

mysqlsql語句中使用多個count關聯查詢多張表

在給公司寫程式碼的過程中忽然發現在sql語句中碰到一些小問題,雖然最終自己解決了,但是不得不說好不容易啊,故寫此部落格提醒自己,以免日後再在此處浪費時間。 需求: 有兩張表,分別是marketChan

mysql sql更新多張表資料

<update id="deleteActor" parameterType="java.lang.String"> UPDATE actor_tbl a LEFT JOIN video_actor_tbl b ON a.sn = b.actorsn SET a.

SQLiteSQL語句插入多記錄,批量插入

為了減少資料庫連線的I/O開銷,一般會把多條資料插入放在一條SQL語句中一次執行。 以前用Mysql做開發一直是這樣用的: INSERT INTO TABLE(col1, col2) VALUES(val11, val12), (val21, val22) ; 最近用SQL

SQL語句查出每門課都大於80分的學生的姓名

src exist spa weight utf8 exists null ont http 用一條SQL語句查出每門課都大於80分的學生的姓名,數據表結構如下: 建表SQL如下: SET FOREIGN_KEY_CHECKS=0; -- --------------

如何sql語句查找表中第二大值

roman splay 排名 數據庫 依然 sel col eight over 例1: 一個Customer表,一個字段Value,現請問如何查到Value中第二大的值 select max(value) from Customer

sql語句update記錄

key mysq ech tle date class spl imp set UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END

cakephp獲取最後sql語句

ger figure manage 設置 語句 代碼 sql語句 echo data 1.在app\config\core.php中設置Configure::write(‘debug‘, 2); 2.頁面上追加如下代碼: $dbo = ConnectionManage

sql語句求出不同班級中男生女生的數量

表: mysql> select * from gg; +------+------+-----+-------+ | id | name | sex | class | +------+------+-----+-------+ | 1 | 張三 | 男 | 1

詳解sql語句的執行過程

inno double other into 數據過濾 計算 var idt 底層實現 SQL是一套標準,全稱結構化查詢語言,是用來完成和數據庫之間的通信的編程語言,SQL語言是腳本語言,直接運行在數據庫上。同時,SQL語句與數據在數據庫上的存儲方式無關,只是不同的數據庫對

如何用SQL語句刪除兩個關聯表的記錄?

有兩個表:group_file和teach_classroom,其中的group_file.group_id和teach_classroom.classroom_id對應唯一 一條語句刪除兩個表的內容: select a.*,b.classroom_namefrom group_file a,t

使用sql語句查詢兩個表的某個欄位為某個值時

使用一條sql語句查詢這兩個表的分數相同的人的名字(使用聯合查詢)    create table a( id int(10), score int(3), name varchar(20), )charset utf8; create table

MyBatis中的多表操作情形:一對一(方式1:sql語句查詢MyBatis3.0可以用associationcollection標籤)

MyBatis支援多表操作,即可以將資料庫中多表的關係對映到物件之間的關係中 表與表之間的關係可以有:一對一,一對多,多對多 關係一演示案例:人和身份證是一對一的,分別建兩個表person和card,其中person的cardid欄位外來鍵關聯card的id,

C#解析Mysqlsql指令碼實現批量匯入資料

最近老大對我們做的資料匯入功能意見挺大,資料量一上來,匯入時間就很長,嚴重影響使用者體驗。因此,不得不花時間搗鼓了一下資料匯入的效能優化問題 原始程式碼: MySqlCommand command = new MySqlCommand(); command.Connection = conn

SQL語句提交後db2都做了什麼?

一直在做 db2 資料倉庫的運維工作,對一些常用操作已經非常熟悉,但是總感覺自己學到是仍然是操作的細節,而不是真正的知識。如果你問我,一條 SQL 語句提交後,db2 都做了哪些工作,我可能會有點慌,因為我不能肯定的回答出來。於是,我就搜尋一些資料,結合自己的理解,總結一下關於 db2 體系

SQL語句的千迴百轉

SQL語言相信大家都不陌生,從本質上來說,它是一種結構化查詢語言,是用來資料庫之間的通訊的程式語言。作為一名Java程式設計師,我們從Java角度來看,SQL語言相當於Java介面,而資料庫是實現這個介面的實現類,SQL語句則是實現類的方法!!。從這裡我們就可以理解了,每個資料庫都有著自己獨特的規則,但大體上

SQL語句的千回百轉

有一個 默認 結構化查詢語言 沒有 out 過程 列表表達式 虛擬表 ota SQL語言相信大家都不陌生,從本質上來說,它是一種結構化查詢語言,是用來數據庫之間的通信的編程語言。作為一名Java程序員,我們從Java角度來看,SQL語言相當於Java接口,而數據庫是實現這個