我的问题与SQL Switch/Case in where clause非常相似。
我得到参数。如果期望 value 为NULL,则需要获取所有值,否则需要使用 value 进行过滤。
我正在尝试在SQL中执行此操作:
WHERE param
CASE
WHEN #{value} IS NULL THEN {IS NOT NULL}
ELSE =#{value}
END
我应该如何更正此SQL请求?
WHERE param IS NOT NULL // all values if **value** is NULL
WHERE param = #{value} // i.e. value = 'data'
答案 0 :(得分:0)
通常使用以下逻辑来完成此操作:
where #{value} is NULL or #{value} = param
我假设#{value}
是要传入的值,而param
是表中的某些列。
答案 1 :(得分:0)
如果我理解您,如果传递的参数为null,则返回该列不为null的所有行,如果该列具有值,则返回具有该值的行。 然后,您应该使用:
where param is NOT NULL OR param = #{value}
答案 2 :(得分:-1)
我遇到了类似的需求。找到了解决方案。多亏了一篇关于 https://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic
例如 声明@param 选择 * 来自blabla 其中(@param为null或blabla.bla_fld = @param)