具有另一个 sql 语句的 where 子句中的 case 条件

Posted

技术标签:

【中文标题】具有另一个 sql 语句的 where 子句中的 case 条件【英文标题】:Case condition in a where clause having another sql statement 【发布时间】:2013-05-20 21:21:17 【问题描述】:

我正在编写一份 jasper 报告,该报告采用一个参数,根据该参数应该有一个不同的 where 子句。以下是我正在使用的查询,但似乎某处存在语法错误。

  select customer.name
         customer_order.name
  from customer, customer
  where customer.orders > 0
    and customer_order.customer_id = customer.id
    and customer_order.name in
        (
           case when (<paramter> = 1) then ('order1', 'order2')
           else  (select order_name from customer_order)
           end
         );

感谢您的帮助, 谢谢

【问题讨论】:

【参考方案1】:

你不能这样写查询。这是一个替代方案:

where . . .
      ((<parameter> = 1) and customer_order.name in ('order1', 'order2') or
       (<parameter> <> 1) and customer_order.name in (select order_name from customer_order)
      )

这是假设&lt;parameter&gt; 不为NULL。如果允许,您需要将其添加到逻辑中。

【讨论】:

【参考方案2】:

您可以使用参数作为占位符动态创建查询的任何部分。

1) 假设您有一个参数 param1,它是实际参数

2) 创建另一个参数,比如 param2,它具有类似的 epression $Pparam1.longValue () == 1 ? " 和字段 1 = " : " 和 field1 = "

3) 在查询中使用 param2 作为占位符

    Select 
        blah blah
    From 
        blah blha
    Where
        blah blah
        $P!param2

现在,取决于你 where 子句可能看起来像的 param1 值

        Where 
            blah blah
            and field1=  <exp1>
        or 

         Where 
            blah blah
            and field1=  <exp2>

【讨论】:

以上是关于具有另一个 sql 语句的 where 子句中的 case 条件的主要内容,如果未能解决你的问题,请参考以下文章

使用JPA在Sql中具有不同值的多个语句where子句

是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?

是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?

SQL:WHERE 子句中的 IF/CASE 语句

简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server

where 子句中的 case 语句 - SQL Server