Case当Variable为null时为null

时间:2013-09-05 12:54:57

标签: oracle plsql

在我的SQL查询中,我有条件:

WHERE 
  parentID = prj.parent_id
  and mandator_fk = mandator_id

变量parentID默认为null。

如果此变量为空,WHERE条件应为parentID is null,而不是像上面的查询(parentID = prj.parent_id)。如果填充此变量,则WHERE条件应为parentID = prj.parent_id

如何只使用一个SQL查询执行此操作?


编辑:它在函数内部,这就是为什么我只有一个SQL查询。

这不起作用我知道,但这就像我需要的那样:

WHERE 
   CASE 
      WHEN parentID is null THEN parentID is null
   ELSE
     parentID = prj.parent_ID
   END
and mandator_fk = mandator_id

TIA frgtv10

2 个答案:

答案 0 :(得分:1)

似乎你想加入null,所以你需要先转换它们。试试这个:

where
NVL(parentId, 0) = NVL(prj.parent_id, 0)
and ...

答案 1 :(得分:1)

我不确定NVL()函数是否可以移植,所以这是编写条件的另一种方法:

WHERE 
    ( parentID = prj.parent_id 
   OR parentID IS NULL AND prj.parent_id IS NULL
    )
  AND mandator_fk = mandator_id