【问题标题】:Dynamic Values in 'IN' operator“IN”运算符中的动态值
【发布时间】:2013-09-25 22:06:23
【问题描述】:

我有一个选择语句,其中 WHERE 子句的 IN 运算符。只要将某些值传递给问号(从 java 程序传递),查询就可以正常工作。但是当没有传递任何值时,我得到一个语法错误。

select
    this_.categoryAddressMapId as category1_1_0_,
    this_.categoryId as categoryId1_0_,
    this_.addressId as addressId1_0_
from
     icapcheckmyphotos.category_address_map this_ <br>
where
     this_.addressId in (
            ?
     )

当没有传递参数时,我需要设置null。请建议如何修改 where 子句。提前致谢

【问题讨论】:

  • 括号中至少要有一个值,例如: where foo in () 不是合法的 sql。它必须至少是where foo in (bar)。在不编写动态 sql 或输入至少一个您知道必须存在的值的情况下,您无法绕过此限制。
  • 如果 Java 程序没有任何可取之处,是否应该调用此查询?似乎没有必要。

标签: mysql sql where-in


【解决方案1】:

修改你的java程序。如果没有 addressId,您的选择是不运行查询,或者确保它至少传递一个值。如果 addressId 是一个整数字段,则传递 -1 或类似的东西。就个人而言,我喜欢第一个选项,但这取决于您的要求。

【讨论】:

    【解决方案2】:

    做一些类似的事情怎么样

    where (? is null) OR this_.addressId in ( ?  )
    

    如果您的列确实接受 NULLS,您可能需要在 OR 的第一部分添加一些特殊处理

    【讨论】:

      【解决方案3】:

      //伪代码 ...

      WHERE 1
      if(!null) {
         AND this_.addressId in ('stuff')
      }
      

      【讨论】:

        猜你喜欢
        • 2020-10-10
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多