首頁  >  問答  >  主體

為什麼 MySQL 中只有列名而沒有等於值的 where 不是語法錯誤

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

從 my_table WHERE id 中選擇 *

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

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

P粉481815897P粉481815897399 天前628

全部回覆(1)我來回復

  • P粉511896716

    P粉5118967162023-09-17 00:12:37

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

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

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

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

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

    回覆
    0
  • 取消回覆