在Select 語句中定義並使用變數
在MySQL 中,通常不建議為使用者變數賦值並讀取這些值在同值一個聲明中。雖然它可能在某些情況下運作,但不能保證此行為,並且可能會根據特定語句的元素和 MySQL 伺服器版本而有所不同。
例如,請考慮以下語句:
SELECT @z:=SUM(item), 2*@z FROM TableA;
在這種情況下,預期結果是第二列回傳 2 乘以項目列總和的值。但是,MySQL 可能會以不同的順序計算語句,導致第二個列為 NULL 值。
此行為背後的原因是 MySQL 不保證涉及使用者變數的表達式的計算順序。透過稍微修改語句,例如引入 GROUP BY 子句,計算順序可能會改變。
但是,有一種解決方法可以透過使用子查詢來實現所需的功能:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
在此子查詢中,變數@z 被分配了項目列的總和,然後與其加倍的值一起被選擇。這種方法可確保在第二列中正確評估和使用變數的值。
以上是MySQL 的 Select 語句能否在單一語句中可靠地使用和重新定義使用者變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!