此查询返回所有表内容。对我来说不是一个有效的 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 也被认为是 true,所以即使这样也会返回所有行:
SELECT * FROM TableName WHERE 2
但是如果一个值 <> 被认为是真的,人们会期望下面的查询可以工作:
SELECT * FROM TableName WHERE 2 = TRUE
但这不会返回任何东西,因为 2 = 1。是的,有时 MySQL 有点奇怪。
Select * from TableName where 1 与 Select * from TableName 等价,因为它在 where true