因为搜索过滤器用mybatis和springreturns整个table

because search filter with mybatis and spring returns the entire table

我正在用 spring 和 mybatis 做一个搜索引擎,所以我必须在我的 table 中按两条记录进行过滤,所以在 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}||'%'
    )

我等待记录的过滤,但整个 table returns 给我

在 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 (BorC`)。这使得表达式更短更容易理解。