為什麼 MySQL 中只有列名而沒有等於值的 where 不是語法錯誤
P粉481815897
P粉481815897 2023-09-16 10:37:20
0
1
658

為什麼這樣的查詢不是語法錯誤?我有 SQL Server 背景,我真的很驚訝。

從 my_table WHERE id 中選擇 *

我認為它會驗證它是否具有值,但行為並不一致,使用 id 時它會返回具有 id 的位置,但使用 name 時它不會返回任何內容:

https://www.db-fiddle.com/f/enWGyAW4BtLC64PVzkbTVK/0

P粉481815897
P粉481815897

全部回覆(1)
P粉511896716

MySQL 有一些不符合標準 ANSI SQL 的行為。在這種情況下,MySQL 將整數零值視為 false,將任何整數非零值視為 true。在標準 SQL 中,整數與布林值不同,但在 MySQL 中卻是。

當您執行查詢WHERE id時,它會傳回id ​​ 0的行。

當您執行查詢WHERE name時,它將字串計算為整數,這表示採用前導數字字元(如果有)的數值,並忽略任何後續的非數字字元。如果沒有前導數字,則字串的整數值為 0。

當您執行查詢WHERE name時,只有當該列中儲存的字串具有非零前導數字時,它才會傳回行。在您的範例 'outro' 中,它只有非數字,因此該值為零,無法滿足條件。

MySQL 的行為符合設計,但這不是標準 SQL。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板