亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果 1 大于其他,sql 查詢交換列

如果 1 大于其他,sql 查詢交換列

PHP
海綿寶寶撒 2023-04-28 14:36:35
如果第 1 列的數字大于第 2 列的數字,我有 2 列,其中有一個數字我想交換這兩列之間的值。有沒有一種簡單的方法可以通過查詢來做到這一點?開始:id | column 1 | column 2------------------------1   50         32   51         4結束:id | column 1 | column 2------------------------1   3          502   4          51
查看完整描述

3 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

你不能只是交換價值。您需要臨時變量第一種方式:

 UPDATE table_name SET column1=column2, column2=@temp WHERE (@temp:=column1) > column2;

第二種方式:這種方式更好,因為它檢查任何值是否為 NULL

UPDATE table_name SET column1=(@temp:=column1), column1= column2, column2 = @temp WHERE column1 > column2;

第二種方式很簡單。它比較兩個列并在需要時交換這個列。


查看完整回答
反對 回復 2023-04-28
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

在UPDATE語句中,MySql 在使用更新列的值時使用非標準 SQL 行為,因為在這樣的語句中:


SET a = x, b = a

a賦值中的值b = a不會是表中存儲的原始值,而是a賦值后的值a = x。

所以這:


update tablename

set column1 = column2,

? ? column2 = column1

在其他數據庫中可以使用的方法在 MySql 中不起作用。


有一個不使用變量或不必要的連接的解決方法:


update tablename

set column1 = column1 + column2,

? ? column2 = column1 - column2,

? ? column1 = column1 - column2

where column1 > column2;

從以下開始工作:


單表 UPDATE 分配通常從左到右評估。

結果:

| id? | column1 | column2 |

| --- | ------- | ------- |

| 1? ?| 3? ? ? ?| 50? ? ? |

| 2? ?| 4? ? ? ?| 51? ? ? |


查看完整回答
反對 回復 2023-04-28
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

您在表上有一個主鍵,所以一個簡單的選擇是join:


update t join

? ? ? ?t t2

? ? ? ?on t.id = t2.id

? ? set t.x = t2.y,?

? ? ? ? t.y = t2.x

? ? where t.x > t.y;

這是一個 db<>fiddle。


出于以下幾個原因,我更喜歡這種方法而不是使用變量:


這不取決于子句的評估順序set,我認為 MySQL 不能保證這一點。

我認為在 MySQL 8+ 中不推薦使用這種變量

它不依賴于表達式的順序,因此更健壯并且更容易適應更復雜的表達式。


查看完整回答
反對 回復 2023-04-28
  • 3 回答
  • 0 關注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號