因为搜索过滤器用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 (
Bor
C`)。这使得表达式更短更容易理解。
我正在用 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 (
Bor
C`)。这使得表达式更短更容易理解。