Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果NULL不';t如果字段值不为NULL,则返回正确的字段值_Mysql_Sql - Fatal编程技术网

Mysql 如果NULL不';t如果字段值不为NULL,则返回正确的字段值

Mysql 如果NULL不';t如果字段值不为NULL,则返回正确的字段值,mysql,sql,Mysql,Sql,即使字段有值且不为NULL,此查询仍会将“-1”返回给别名 从图像中可以看到,如果字段不为NULL,则应返回(1)。或者我只是误解了IFNULL函数。IFNULL()逐行工作,在home\u ownerID下看到NULL的每一行上,因此IFNULL()正确地返回ownerID列中的负一。只有一行home_ownerID有一个值,正确地说,IFNULL()只为该行返回该值 您可能会想象,IFNULL()可以神奇地用单个值填充每一行,但它无法做到这一点。如果您希望在列中也包含非NULL值,则类似

即使字段有值且不为NULL,此查询仍会将“-1”返回给别名

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

IFNULL()逐行工作,在home\u ownerID下看到NULL的每一行上,因此IFNULL()正确地返回ownerID列中的负一。只有一行home_ownerID有一个值,正确地说,IFNULL()只为该行返回该值


您可能会想象,IFNULL()可以神奇地用单个值填充每一行,但它无法做到这一点。

如果您希望在列中也包含非NULL值,则类似以下内容:

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

我认为结果是正确的。你能让你的问题重现吗?正如您所建议的,对于
所有者ID
,您不应该看到
-1
,至少不应该看到该值,因为
房屋所有者ID
NULL
。更好的是,为我们粘贴一个演示()。您必须理解ISNULL和IFNULL之间的区别。检查简单样本的链接,我相信您误解了IFNULL()的功能。它只是一个逐行运行的函数。我想做的是,如果home\u ownerID为NULL,则将默认值设置为-1,如果home\u ownerID不为NULL,则从获取它的字段中设置它的值。所以,基本上。如果NULL将value设置为-1,如果不是NULL,则将value设置为它是什么值,只要它不是NULL,我们就需要了解有关数据和查询的更多信息,以便正确回答该注释。但是你问的问题是我只是误解了IFNULL函数,是的,你确实误解了。这是我的house_interiors表,这是我的house_players表。我已经完成了使用内部连接来连接它们。我的目标如果房子是无主的(NULL),则在查询别名ownerid上设置默认值-1,如果房子是有主的(非NULL),则将该值设置为house\u ownerid中的任何值。例如,house-1owned->notnull house-2-notowned->NULL house将返回-1,而house 2将返回ownerID,在本例中为1。希望我已经解释过了@如果解决方案是这样,你会转录它吗?数据的图像不便于使用和解释。我敦促你们考虑打开一个新的问题。我想把所有的东西都装入零,因为我已经习惯了。我想做的是,如果house\u ownerID为NULL,则将默认值设置为-1,如果不为NULL,则将house\u ownerID的值设置为已设置的值。如果子查询返回多行?你如何决定哪一个是相关的?@Patrick。这就是您的代码所做的。您似乎希望所有其他行上都有非NULL值。是的,我的代码正在做什么,但它似乎返回-1,即使在非NULL的行上也是如此,这是我的问题。例如,我的目标如果房子是无主的(NULL),则在查询别名ownerid上设置默认值-1;如果房子是有主的(非NULL),则将该值设置为house_ownerid中的任何值。例如,house-1owned->notnull house-2-notowned->NULL house将返回-1,而house 2将返回ownerID,在本例中为1@戈登林诺夫
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;