如何在不改變表結構的情況下有效率地交換MySQL中的列值?
Dec 11, 2024 am 12:41 AM在不改變表結構的情況下交換MySQL 中的列值
正如您所提到的,使用UPDATE 透過簡單的SET X=Y 來交換列值,Y=X 將不會產生所需的結果。但是,您可以考慮多種替代方法,具體取決於您的資料和權限限制。
方法 1:帶有 IS NOT NULL 檢查的臨時變數
此方法採用臨時變量,用於在與另一列交換時保存一列的值。但是,它僅在兩個值都非 NULL 時才有效。
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
登入後複製
方法2:不含IS NOT NULL 檢查的臨時變數
一種更通用的方法,可以處理NULL 和非NULL 值:
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
登入後複製
登入後複製
方法3:雙表更新
另一種方法涉及使用第二個表來交換值。這需要存在主鍵:
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
登入後複製
測試範例
使用提供的測試架構:
CREATE TABLE `swap_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `x` varchar(255) DEFAULT NULL, `y` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO `swap_test` VALUES ('1', 'a', '10'); INSERT INTO `swap_test` VALUES ('2', NULL, '20'); INSERT INTO `swap_test` VALUES ('3', 'c', NULL);
登入後複製
應用方法2應該成功交換值:
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
登入後複製
登入後複製
輸出:
id x y 1 10 a 2 20 NULL 3 NULL c
登入後複製
以上是如何在不改變表結構的情況下有效率地交換MySQL中的列值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前
By 尊渡假赌尊渡假赌尊渡假赌

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前
By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在 Linux 中運行 MySQl(有/沒有帶有 phpmyadmin 的 podman 容器)
