1

此查询返回所有表内容。对我来说不是一个有效的 where 子句。有人知道为什么会这样吗?

SELECT * FROM TableName WHERE 1
4

2 回答 2

4

在 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 有点奇怪。

于 2013-09-03T18:59:37.257 回答
0

Select * from TableName where 1 与 Select * from TableName 等价,因为它在 where true

于 2013-09-03T18:59:46.820 回答