此查询返回所有表内容。对我来说不是有效的 where 子句。有人知道为什么会这样吗?
SELECT * FROM TableName WHERE 1
最佳答案
在 MySQL 中,TRUE 是一个常数值 = 1,而 FALSE 是 = 0,那么您的查询等同于:
SELECT * FROM TableName WHERE TRUE
此外,所有条件都转换为 0 或 1:
SELECT 'a' = 'a'
将返回 1,而
SELECT 'a' = 'b'
将返回 0,因此例如以下查询都是等价的:
SELECT * FROM TableName WHERE TRUE
SELECT * FROM TableName WHERE 'a' = 'a'
SELECT * FROM TableName WHERE 1
但是每个值 <> 0 也被认为是真的,所以即使这样也会返回所有行:
SELECT * FROM TableName WHERE 2
但是如果一个值 <> 被认为是真的,人们会期望下面的查询起作用:
SELECT * FROM TableName WHERE 2 = TRUE
但这不会返回任何东西,因为 2 = 1。是的,有时 MySQL 有点奇怪。
关于不应该工作但返回所有表内容的 MySQL where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18599542/