mysql交換對調兩條記錄的某乙個字段

2021-08-28 03:06:39 字數 1315 閱讀 7976

在對資料庫的資料在前端進行展示列表的時候,經常有這麼乙個需求,就是將已經排序的列表進行調整順序,比如

現在想把id為8的資料, 向下移一位,也就是和id為11sort字段進行對調

第一種方式

這個一般來說是把兩條資料都查出來,

user1.

setsort

(user2.getsort)

; user2.

setsort

(user1.getsort)

; update

(user1)

;update

(user2)

;

這樣查兩次資料庫, 再更改兩次資料庫的操作並不是最好的選擇.

如果要在一條sql語句裡面寫,一樣很麻煩

第二種方式

update tbl_core_member c

set c.sort=

(case

when id=

8then

(select a.sort from

(select cc.

*from tbl_core_member cc) a where a.id=11)

when id=

11then

(select a.sort from

(select tmp.

*from question tmp) a where a.id=8)

end)

where c.id=

11or c.id=

8;

因為mysql不支援一邊查詢一邊update,所以還需要包裝成乙個a的假錶,而且用到case when, 也顯得十分臃腫

第三種方式

update 

tbl_core_member c

join

tbl_core_member cc

on(c.id =

8and cc.id =11)

or(c.id =

11and cc.id =8)

set c.sort = cc.sort , cc.sort = c.sort

這種就是同乙個錶用內連線拼接,把第二個表的sort給第乙個表,第乙個表的sort給第二個表,也避免了重新包裝一層select…from 假錶 的步驟

MySQL 兩條記錄合併查詢成一條顯示

資料庫資料如下 張三,屬於a部門也屬於b部門,在表裡存的是兩條記錄,但是在頁面上我想要根據人來顯示,在一條記錄裡顯示張三屬於a部門和b部門,張三隻顯一條記錄,不顯示兩條。select t.id,t.code,t.name,max case t.type when a then t.dept name...

Mysql 計算相鄰兩條記錄的時間差

比如排序之後我們想計算兩條相鄰記錄的時間差,因為mysql沒有視窗函式所以要麼模擬視窗函式要麼使用表自關聯,現有如下表資料 單獨只有這些資訊使用自關聯沒有約束條件,這時候我們可以使用增加乙個序號的字段,然後使用序號條件關聯 表一 select a.i i 1 as ord num from t pu...

Oracle取兩條記錄的交集INTERSECT

摘自 intersect 操作符用來合併兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前提是兩個查詢的列的數量和資料型別必須完全相同。select code from employee where gender m intersect select code from salary...