Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
SQL查询问题-对于绑定到同一表中其他记录的记录,始终返回null_Sql - Fatal编程技术网

SQL查询问题-对于绑定到同一表中其他记录的记录,始终返回null

SQL查询问题-对于绑定到同一表中其他记录的记录,始终返回null,sql,Sql,我有我的记录(在示例1000中),它与使用parentid作为父项的其他记录相关。 我想在所有“子项”都处于关闭状态时选择该记录 表为T1: ID PARENTID STATUS 1000 null PENDING 1001 1000 CLOSED 1002 1000 CLOSED 我编写了SQL,但它返回null,尽管它不应该(“notin”工作不太好) 但是它返回的是me null,尽管从ID WH

我有我的记录(在示例1000中),它与使用parentid作为父项的其他记录相关。 我想在所有“子项”都处于关闭状态时选择该记录

表为T1:

ID       PARENTID     STATUS
1000      null        PENDING
1001      1000        CLOSED
1002      1000        CLOSED
我编写了SQL,但它返回null,尽管它不应该(“notin”工作不太好)

但是它返回的是me null,尽管
从ID WHERE STATUS!='CLOSED'
不返回1000。 为什么?如果“NOT IN”子句不起作用,则如何选择


非常非常重要的一点是,我不能使用
“WHERE PARENTID=ID”
,虽然我知道这将是一个解决方案,但我必须以不同的方式来做

原因是子查询返回
NULL
。启用ansi_nulls时,PARENTID
NULL
是未知的,因此您不会得到任何行

试试这个:

select ID
from T1
where PARENTID is null and ID not in (
        select isnull(PARENTID, -1)
        from T1
        where status != 'CLOSED'
        )
有关更多信息,请参阅:


IN子句不适用于null。在查询中使用nvl四处走动(Oracle)-

或者,如果您使用的是db2-

select ID from T1 where PARENTID is null and ID not in (select coalesce(parentid,0) from T1 where status != 'CLOSED');
另一种方法是

SELECT ID
FROM T1 T1Name
WHERE PARENTID IS NULL AND 
not exists(select 1 from T1 where ID=T1Name.parentid and status!='CLOSED')

您好,我正在使用DB2。这个函数似乎在DB2中不起作用。我尝试使用COALESCE(PARENTID,0),但它返回了错误!如果我尝试合并(PARENTID,null),它会再次返回空结果。你知道答案吗?谢谢你的帮助!联合就是解决办法!!非常感谢。这个函数到底做什么?再次感谢如果列为null,它将用您指定的值替换null,在本例中为0,以便您能够将其与“in”子句进行比较。您无法执行!=,=,在etc on null as null中,null不等于相等或不相等。
select ID from T1 where PARENTID is null and ID not in (select coalesce(parentid,0) from T1 where status != 'CLOSED');
SELECT ID
FROM T1 T1Name
WHERE PARENTID IS NULL AND 
not exists(select 1 from T1 where ID=T1Name.parentid and status!='CLOSED')