我有以下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
something
等于1.所以CASE语句为TRUE所以它将执行THEN
'true'
语句
但是当我在别名test
周围添加单引号时:
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'
。有谁可以解释为什么他们不同?
答案 0 :(得分:3)
单引号(或撇号,如果您愿意)用于表示字符串(有时是日期),但不是整数值。
我假设你的id_something
是一个整数变量。如果是这种情况,问题在于您试图将整数与字符串进行比较,该字符串将始终返回false。
在第一个示例中,您选择了一个整数并为其指定了别名test
。进行比较时,您要比较两个有效的整数。但是,一旦将其更改为'test'
,您现在就拥有一个字符串,该字符串与id_zam
无关。当您对整数和字符串进行比较时,默认情况下返回false。
修改强>
这对于别名是正确的,但不一定都是真的。在此示例中,test
是别名,'test'
是字符串文字,因此它们将被区别对待。但是,根据MySQL默认值,单引号不会影响其他项的比较。例如,如果您的条件为1 = '1'
,则返回true。请参阅此答案的评论以获得其他解释。
如果要使用别名比较某些内容,要重新强调并简化,请不要使用单引号。
答案 1 :(得分:-1)
因为这个子查询,你得到了错误:
SELECT something FROM sth WHERE id_something = 'test'
不会返回等于1的单个记录。