用例逻辑的SQL-Where子句
我需要在查询中使用case类型的逻辑。使用的数据库:Oracle 11g 当前查询如下所示:用例逻辑的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,
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'));