在SELECT 語句中宣告並使用變數
在SQL 中,為變數賦值並在相同查詢中擷取該值可以具有挑戰性。考慮以下範例:
此查詢嘗試計算「item」列的總和並將其儲存在名為「@z」的變數中。然後它將“@z”的值乘以 2。然而,令人驚訝的是,第二列總是傳回 NULL。
出現這種情況是因為 MySQL 的文件明確指出將值指派給使用者變數並在不應依賴相同聲明。此類表達式的求值順序未定義,並且可能會在未來版本中發生變更。
為了進一步說明這一點,請考慮替代查詢:
在此查詢中,「@z」是透過過程呼叫分配一個值。在這種情況下,查詢按預期工作,因為過程呼叫是與變數分配分開評估的。
要克服使用者變數的限制,您可以利用子查詢來分配值並在主查詢中檢索它查詢:
在此子查詢中,使用SELECT 指派「@ z”的值。然後主查詢選擇“@z”並執行必要的計算。
以上是為什麼在單一 SQL SELECT 語句中使用變數經常傳回意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!