SQL查询问题-对于绑定到同一表中其他记录的记录,始终返回null
我有我的记录(在示例1000中),它与使用parentid作为父项的其他记录相关。 我想在所有“子项”都处于关闭状态时选择该记录 表为T1: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
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时,PARENTIDNULL
是未知的,因此您不会得到任何行
试试这个:
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')