2013-05-20 3 views
1

Я работаю над сообщением яшмы, который принимает один параметр, на основе которого у него должно быть другое предложение where. Ниже приведен запрос, который я использую, но, похоже, где-то есть синтаксическая ошибка.Условие условия в предложении where, имеющем другой оператор sql

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

Вы можете динамически создавать любую часть запроса, используя параметр в качестве заполнителя.

1) Допустим, у вас есть параметр param1, который является фактическим параметром

2) Создайте еще один параметр сказать param2, который имеет epression как $ P {param1} .longValue() == 1 ? "И field1 =" : "и field1 ="

3) Используйте param2 в качестве заполнителя в запросе

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

Теперь, в зависимости от значения param1 вы где положение может выглядеть

 Where 
      blah blah 
      and field1= <exp1> 
     or 

     Where 
      blah blah 
      and field1= <exp2> 
2

Вы не можете написать запрос, как это. Вот альтернатива:

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

Это предполагает, что <parameter> не NULL. Если это разрешено, вам нужно добавить это в логику.

Смежные вопросы