MySQL where子句不应该工作但返回所有表内容

时间:2013-09-03 18:57:47

标签: mysql

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

SELECT * FROM TableName WHERE 1

2 个答案:

答案 0 :(得分:4)

在MySQL中,TRUE是一个costant值= 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

但是如果值<&lt;&gt;被认为是真的,人们会期望以下查询起作用:

SELECT * FROM TableName WHERE 2 = TRUE

但这不会返回任何内容,因为2 = 1.是的,有时MySQL有点奇怪。

答案 1 :(得分:0)

从TableName中选择*,其中1与TableName中的Select *等效,因为它是真实的