此查询返回所有表内容。对我来说不是一个有效的where子句。任何人都知道为什么这样有效?
SELECT * FROM TableName WHERE 1
答案 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 *等效,因为它是真实的