2015-02-10 5 views
1

Предположим, я следующий SQL select пункт:Если внутри выберите пункт

SELECT * FROM some_table_1 t1 
    join some_table t2 on t2.some_id = t1.id and 
    t2.school_id = 56 and 
    t1.is_valid = 1 and 
    t2.status in (15, 16, 17, 18); 

Но я также проверить, если t2.status = 18, то я должен также проверить, если t2.date < 01.01.2015

Как я могу добавить это условие к этому select?

+2

Что вы хотите _do_ в этих случаях? Я не могу сказать, хотите ли вы предложение WHERE или оператор CASE. –

+0

И (t2.date <01.01.2015 ИЛИ t2.status <> 18) – jarlh

+1

Что значит положить '18' в предложение' IN'? –

ответ

1

Это звучит, как вы только хотите присоединиться на строках, имеют статус 18, когда дата (это плохое имя для столбца, так как это зарезервированное слово Oracle. Я также предполагаю, что это тип данных DATE) меньше 1 января 2015 года. Если это так, то следующее должен сделать трюк:

SELECT * 
FROM some_table_1 t1 
     join some_table t2 on t2.some_id = t1.id 
          and t2.school_id = 56 
          and t1.is_valid = 1 
          and (t2.status in (15, 16, 17) 
            or (t2.status = 18 and t2.date < to_date('01.01.2015', 'dd.mm.yyyy.'))); 
0

Просто добавьте or проверки «не 18», или соответствие ваше второе условие:

SELECT * 
FROM some_table_1 t1 
join some_table t2 
on  t2.some_id = t1.id 
and t2.school_id = 56 
and t1.is_valid = 1 
and t2.status in (15, 16, 17, 18) 
/* added part */ 
where (t2.status != 18 
     or t2.date < to_date('01.01.2015', 'dd.MM.yyyy') 
     ) 
+1

Какой смысл вкладывать 18 в предложение IN? –

+1

@CoderofCode: Если у вас его нет, он не будет содержать строки, имеющие статус = 18' ... –

0

Вы можете добавить:

where t2.status <> 18 or t2.date < date '2015-01-01' 
Смежные вопросы