我有一个类似的查询:
SELECT IF(b.field IS NULL, c.field, b.field) as `field`
FROM aaaaa a
LEFT OUTER JOIN bbbbb b
ON b.uid = a.b_id
LEFT OUTER JOIN ccccc c
ON c.uid = a.c_id;
此查询有效。我的问题是,当以下内容使用CASE
时,以前的查询无效:
SELECT
CASE b.field
WHEN NULL THEN c.field
ELSE b.field
END as `field`
FROM aaaaa a
LEFT OUTER JOIN bbbbb b
ON b.uid = a.b_id
LEFT OUTER JOIN ccccc c
ON c.uid = a.c_id;
假设aaaaa.b_id
或aaaaa.c_id
为空;从来没有,从来没有。还假设aaaaa
,bbbbb
和ccccc
之间的外键都已正确配置。 rehl x86_64上的mysql v5.1.60
第一个查询按预期正确返回结果,但是当我使用CASE
时,我只返回满足ELSE
时的值(仅c.field
返回,仅b.field
S)。什么给了?
答案 0 :(得分:3)
那是因为case
形式检查条件b.field = null
,你不能用这种方式比较空值。
请改用case
的此形式:
CASE
WHEN b.field IS NULL THEN c.field
ELSE b.field
END as `field`
您也可以使用coalesce
:
COALESCE(b.field, c.field) as `field`
或ifnull
:
IFNULL(b.field, c.field) as `field`