1 回答

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