1 回答
TA貢獻1895條經驗 獲得超3個贊
WHERE xx將匹配計算結果為真值的任何行。由于BOOLEAN實際上是數字類型TINYINT(1),因此它的工作原理是轉換為數字,然后與零進行比較 - 任何非零數字都是真實的。(NULL是假的。)
如果你寫,那么僅對于isWHERE id = 123的行,表達式將計算為(與 相同)并且它會匹配,否則它將計算為()。id123id = 123TRUE1FALSE0
但如果你寫WHERE id,則要求id計算結果為真值。如果id是一個數字,則只有 ID 0,NULL將是假的。
但是,在 的情況下description,您有一個字符串。并且字符串首先被轉換為數字。您獲得許多結果的原因是任何以數字(非零)開頭的字符串都是匹配的,例如01234hello(轉換為非零的 1234)。檢查CONVERT(description, SIGNED)給出的內容 - 如果它非零,則它匹配。
這就是為什么在代碼中構建AND或OR查詢時,您可以通過以TRUEor 1(在這種AND情況下)或FALSEor 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 關注
- 143 瀏覽
添加回答
舉報
