MySQL - 为什么在null和if之间的情况不同的结果为null?

时间:2014-04-17 23:28:35

标签: mysql sql if-statement case

我有一个类似的查询:

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_idaaaaa.c_id为空;从来没有,从来没有。还假设aaaaabbbbbccccc之间的外键都已正确配置。 rehl x86_64上的mysql v5.1.60

第一个查询按预期正确返回结果,但是当我使用CASE时,我只返回满足ELSE时的值(仅c.field返回,仅b.field S)。什么给了?

1 个答案:

答案 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`