我有以下SQL查询:
SELECT id_zam AS test,
CASE WHEN (SELECT something FROM sth WHERE id_something = test) = 1
THEN
'true'
ELSE
'false'
END as test_result
FROM testTable
等于1.因此CASE语句为TRUE所以它将执行THEN语句,这是’true’
但是,当我在别名测试周围添加单引号时,如下所示:
SELECT id_zam AS 'test',
CASE WHEN (SELECT something FROM sth WHERE id_something = 'test') = 1
THEN
'true'
ELSE
'false'
END as test_result
FROM testTable
查询返回’false’.任何人都可以解释为什么他们不同?
最佳答案 单引号(或撇号,如果您愿意)用于表示字符串(有时是日期),但不是整数值.
我假设你的id_something是一个整数变量.如果是这种情况,问题在于您尝试将整数与字符串进行比较,该字符串将始终返回false.
在第一个示例中,您选择了一个整数并为其提供了别名测试.进行比较时,您要比较两个有效的整数.但是,一旦你将它改为’test’,你现在就有一个字符串,它与id_zam没有任何关系.对整数和字符串进行比较时,默认情况下返回false.
编辑
这对于别名是正确的,但不一定都是真的.在这个例子中,是,test是一个别名,’test’是一个字符串文字,所以它们将被区别对待.但是,根据MySQL默认值,单引号不会影响其他项的比较.例如,如果您的条件为1 =’1′,则返回true.有关其他说明,请参阅此答案的评论.
要重新强调和简化,如果要使用别名比较某些内容,请不要使用单引号.