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,
从图像中可以看出,如果字段不为NULL,则应返回(1)。或者我只是误解了IFNULL功能。
答案 0 :(得分:0)
IFNULL()在逐行的基础上工作,在home_ownerID下看到NULL的每一行上,所以IFNULL()在ownerid列中正确返回减1。 home_ownerID有一个值有一行,正确的IFNULL()只返回该行的值
你可能会想象不知何故神奇地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;