2016-05-10 3 views
-5

У меня есть запрос ниже. Мне нужно заменить запрос INЗаменить запрос IN на сервере sql

 SELECT * FROM TABLE1 
    WHERE 
     FIELD2 LIKE '%SEARCH_DATA%' 

     AND (CASE WHEN CONDITION1=TRUE THEN FIELD1 
       ELSE 'TEXT1' 
       END IN ('TEXT1','TEXT2')) 

Не могли бы вы сообщить мне, как заменить IN тем же условием.

+1

На самом деле то, что вы пытаетесь сделать? – Wanderer

+0

Каково ваше требование? Его запутанный – MusicLovingIndianGirl

+0

заменить 'IN' на * что * точно? – Jamiec

ответ

1

попробовать что-то вроде этого,

SELECT * 
FROM TABLE1 
WHERE CONDITION1 <> TRUE -- CONDITION1 = FALSE 
    OR (FIELD1 = 'TEXT1' OR FIELD1 = 'TEXT2') 
1

Это приводит к:

SELECT * FROM TABLE1 
WHERE FIELD2 LIKE '%SEARCH_DATA%' 
AND 
(
    (CONDITION1 = TRUE AND FIELD1 IN ('TEXT1','TEXT2')) 
    OR CONDITION1 = FALSE 
    OR CONDITION1 IS NULL 
) 

Если условие может быть только TRUE, или FALSE, а не NULL, то мы можем упростить это:

SELECT * FROM TABLE1 
WHERE FIELD2 LIKE '%SEARCH_DATA%' AND (CONDITION1 = FALSE OR FIELD1 IN ('TEXT1','TEXT2')) 

(в противном случае нам пришлось бы заменить CONDITION1 = FALSE на CONDITION1 = FALSE OR CONDITION1 IS NULL).

И без IN (хотя мне больше нравится с IN):

SELECT * FROM TABLE1 
WHERE FIELD2 LIKE '%SEARCH_DATA%' 
AND (CONDITION1 = FALSE OR FIELD1 = 'TEXT1' OR FIELD1 = 'TEXT2') 
Смежные вопросы