我需要在查询中使用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。现在,我们需要像IF SRID为null然后使用SID,否则使用SRID在WHERE子句中映射到MID。
答案 0 :(得分:3)
我想你想要coalesce function,它返回第一个非空值。不幸的是,我无法访问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')
)
Here是coalesce和nvl之间的比较。 (我不熟悉nvl)
答案 1 :(得分:0)
请使用
NVL(s.SRID, s.SID) = m.MID
而不是
s.SID = m.MID
在where条件下。
答案 2 :(得分:0)
尝试使用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'));