我正在使用spring和mybatis做一个搜索引擎,因此我必须按表中的两个记录进行过滤,因此在oracle文档中我获得了NVL函数,但无法成功将其实现到我的查询中
SELECT
FC.COD_FCD,
FC.DSC_FCD,
DS.DSC_DSL ,
FC.COD_EST_GNC,
FC.COD_HBT
FROM SPFS_DT_FACUL FC
INNER JOIN SPFS_DT_DSPLG DS
ON FC.COD_DSL = DS.COD_DSL
WHERE
(
FC.COD_AB='01'
AND FC.COD_FCD LIKE #{value1}||'%'
)
OR (
FC.COD_AB='01'
AND FC.DSC_FCD LIKE #{value2}||'%'
)
我等待记录的过滤,但是整个表都返回给我
答案 0 :(得分:0)
在Oracle中,任何非空值都在条件LIKE NULL || '%'
上匹配。
我认为当一个(或两个)参数为null
时,您正在尝试避免匹配条件。最简单的方法是明确检查是否为空:
SELECT
FC.COD_FCD,
FC.DSC_FCD,
DS.DSC_DSL ,
FC.COD_EST_GNC,
FC.COD_HBT
FROM SPFS_DT_FACUL FC
INNER JOIN SPFS_DT_DSPLG DS
ON FC.COD_DSL = DS.COD_DSL
WHERE
FC.COD_AB='01'
AND
( #{value1} IS NOT NULL AND FC.COD_FCD LIKE #{value1}||'%' )
OR ( #{value2} IS NOT NULL AND FC.COD_FCD LIKE #{value2}||'%' )
)
还请注意,我将您的条件(A and B) or (A and C)
分解为A and (
B or
C`)。这使表达式更短,更易于理解。