1 回答

TA貢獻1895條經驗 獲得超3個贊
WHERE x
x
將匹配計算結果為真值的任何行。由于BOOLEAN
實際上是數字類型TINYINT(1)
,因此它的工作原理是轉換為數字,然后與零進行比較 - 任何非零數字都是真實的。(NULL
是假的。)
如果你寫,那么僅對于isWHERE id = 123
的行,表達式將計算為(與 相同)并且它會匹配,否則它將計算為()。id
123
id = 123
TRUE
1
FALSE
0
但如果你寫WHERE id
,則要求id
計算結果為真值。如果id
是一個數字,則只有 ID 0
,NULL
將是假的。
但是,在 的情況下description
,您有一個字符串。并且字符串首先被轉換為數字。您獲得許多結果的原因是任何以數字(非零)開頭的字符串都是匹配的,例如01234hello
(轉換為非零的 1234)。檢查CONVERT(description, SIGNED)
給出的內容 - 如果它非零,則它匹配。
這就是為什么在代碼中構建AND
或OR
查詢時,您可以通過以TRUE
or 1
(在這種AND
情況下)或FALSE
or 0
(在這種OR
情況下)開頭來避免專門處理零條件的情況,因為WHERE TRUE
/WHERE 1
是有效的(匹配所有內容),就像WHERE FALSE
/ WHERE 0
(不匹配任何內容)。WHERE 1
因此,您可以通過以下方式開始并添加以下內容來構建查詢: WHERE 1
、WHERE 1 AND id = 123
、WHERE 1 AND id = 123 AND type = 'xy'
等。
- 1 回答
- 0 關注
- 134 瀏覽
添加回答
舉報