mysql 中 where 條件中僅有字段的疑惑
在 mysql 中,有一個獨特的查詢現象,當在 where 條件中僅指定字段而未指定具體值時,可以返回符合特定條件的結果。例如,在以下查詢語句中:
select id from users where id
即使 where 子句中沒有指定具體值,該查詢仍會返回結果,但僅限于 id 字段以數字開頭的記錄,而字母和 0 開頭的記錄會被過濾掉。
mysql 文檔的解釋
根據 mysql 官方文檔,當在 where 條件中指定表達式時,表達式必須對每條要選擇的行返回 true:
where_condition 是一個表達式,對于每條要選擇的行來說,其值為真。
換句話說,在沒有指定具體值的情況下,where 中的字段自身被當作一個條件,如果該字段的值可以轉換為 true,則滿足該條件。對于 id 字段來說,數字和字符串空值都可以轉換為 true,而字母和 0 則不能,因此只有數字開頭的記錄才會被返回。
表達式的概念
在 mysql 中,表達式可以包含任何 mysql 支持的函數和操作符,包括邏輯運算符和比較運算符。在 where 條件中使用字段時,它會被視為一個布爾表達式,其值為 true 或 false。例如:
where id > 0
這個條件等于以下表達式:
where id is not null and id <> "" and id > 0
因此,id 字段被視為一個條件,如果其值大于 0 則為 true,否則為 false。
結論
在 mysql 中,where 條件中僅有字段的查詢現象是因為字段本身被當作一個表達式,其值可以轉換為 true 或 false。對于數字字段,數字和字符串空值可以轉換為 true,而字母和 0 則不能,因此僅返回數字開頭的記錄。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END