在SELECT 語句中使用變數
使用MySQL 時,您可能會遇到想要在同一個SELECT 中定義和使用變數的情況陳述。但是,了解所涉及的限制非常重要。
變數賦值和可讀性
根據 MySQL 文檔,通常不建議為變數賦值使用者變數並在同一語句中讀取它。涉及使用者變數的表達式的求值順序未定義,並且可能會根據語句的元素而有所不同。
這表示以下查詢可能不會如預期執行:
SELECT @z:=SUM(item), 2*@z FROM TableA;
在這種情況下,您可能會在第二列中獲得 NULL。
為什麼與過程?
您可能想知道為什麼以下使用預存程序而不是用戶變量的查詢能夠按預期工作:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
這樣做的原因是存儲過程的評估方式與用戶變數不同。預存程序的求值順序已定義且一致。
使用子查詢
要實現所需的功能,可以使用子查詢:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
此方法使用子查詢來初始化用戶變數(@z),然後在主查詢中引用它。
以上是如何正確使用MySQL SELECT語句中的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!