用例逻辑的SQL-Where子句

用例逻辑的SQL-Where子句,sql,oracle,Sql,Oracle,我需要在查询中使用case类型的逻辑。使用的数据库:Oracle 11g 当前查询如下所示: SELECT name FROM merchant m WHERE NOT EXISTS ( SELECT 1 FROM settlement s WHERE s.sid = m.mid AND s.rpt_id IN ('111','112','202') ) 还有另一列SRID优先于SID,也可以映射到MID。现在,我们需要一些东西,比如如果SRID为null,

我需要在查询中使用case类型的逻辑。使用的数据库:Oracle 11g

当前查询如下所示:

SELECT name 
FROM merchant m 
WHERE NOT EXISTS ( 
   SELECT 1 
   FROM settlement s 
   WHERE s.sid = m.mid 
   AND s.rpt_id IN ('111','112','202')
)
还有另一列SRID优先于SID,也可以映射到MID。现在,我们需要一些东西,比如如果SRID为null,那么在WHERE子句中使用SID,否则使用SRID映射到MID。

请使用

NVL(s.SRID, s.SID) = m.MID
而不是

s.SID = m.MID
在where条件下。

我想您需要,它返回第一个非空值。不幸的是,我无法访问Oracle系统进行确认

select NAME 
from merchant m 
where NOT EXISTS (
    SELECT 1 from SETTLEMENT s 
    where coalesce(s.SRID,s.SID) = m.MID and 
    s.RPT_ID IN ('111','112','202')
    )

是coalesce和nvl之间的比较。(我不熟悉nvl)

尝试使用
nvl
功能

SELECT NAME 
FROM   merchant m 
WHERE  NOT EXISTS(
     SELECT 1 
     FROM settlement s 
     WHERE NVL(s.srid, s.sid) = m.mid 
     AND s.rpt_id IN ('111','112','202'));