如果IFNULL不为NULL,则IFNULL不会返回正确的字段值

时间:2017-11-20 01:34:22

标签: mysql sql

SELECT *, IFNULL(h.house_ownerID, -1) AS ownerid
FROM house_players AS h
INNER JOIN house_interiors AS hi
    ON h.house_interiorID = hi.house_intLevel

此查询仍会返回' -1'到ALIAS,即使该字段有值而且不是NULL,

Image

从图像中可以看出,如果字段不为NULL,则应返回(1)。或者我只是误解了IFNULL功能。

2 个答案:

答案 0 :(得分:0)

IFNULL()在逐行的基础上工作,在home_ownerID下看到NULL的每一行上,所以IFNULL()在ownerid列中正确返回减1。 home_ownerID有一个值有一行,正确的IFNULL()只返回该行的值

Image

你可能会想象不知何故神奇地IFNULL()可以用这个单一的值填充每一行,但它不能那样做。

答案 1 :(得分:-1)

如果你想在列中也有非NULL值,那么像这样:

SELECT h.*, hi.*,
       COALESCE(h.house_ownerID, 
                (SELECT h2.house_ownerId FROM house_players h2 WHERE h2.house_interiorID = h.house_interiorID)
               ) AS ownerid
FROM house_players h INNER JOIN
     house_interiors hi
     ON h.house_interiorID = hi.house_intLevel;