【问题标题】:SQL Switch/Case in where clause with NULL valueNULL 值的 where 子句中的 SQL Switch/Case
【发布时间】:2018-10-17 13:07:23
【问题描述】:

我的问题与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'

【问题讨论】:

  • 你能用例子解释的更清楚吗?
  • 'param' 是表中的某个列,'value' 我在这个请求之前得到。如果 value = null 我应该获取所有值,如果例如 value = 'data' 我需要过滤。
  • 所以如果参数为空,你想做什么
  • 如果值为 null 我不过滤;参数不为空
  • 如果值为 null 则返回所有不为 null 的参数?

标签: sql switch-statement case


【解决方案1】:

这通常使用如下逻辑来完成:

where #{value} is NULL or #{value} = param

我假设#{value} 是传入的值,param 是表中的某个列。

【讨论】:

    【解决方案2】:

    如果我理解你,如果传递的参数为 null,则返回该列不为 null 的所有行,如果它有值,则返回有值的行。 那么你应该使用:

    where param is NOT NULL OR param = #{value}
    

    【讨论】:

    • 在这种情况下,我得到所有值。
    【解决方案3】:

    我遇到了类似的需求。找到了解决办法。感谢一篇关于 https://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic

    例如 声明@param 选择 * 来自 blabla 其中(@param 为 null 或 blabla.bla_fld = @param)

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多