2015-02-10 68 views
1

假設我有以下SQL select條款:如果內部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

你想在這些情況下做什麼?我不知道你是否想要一個'WHERE'子句或'CASE'語句。 – 2015-02-10 13:54:33

+0

AND(t2.date <01.01.2015 OR t2.status <> 18) – jarlh 2015-02-10 13:55:16

+1

將'18'放入'IN'子句有什麼意義? – 2015-02-10 13:55:58

回答

1

這聽起來像你只是想加入上行時,如果日期(這是一個列的錯誤名稱,因爲它是一個Oracle保留字,我也假定它是DATE數據類型)小於2015年1月1日,那麼它的狀態爲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) 
            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

把IN放在IN子句中有什麼意義? – 2015-02-10 13:56:33

+1

@CoderofCode:如果你沒有它,它會忽略'status = 18'的行...... – 2015-02-10 14:07:43

0

您可以添加:

where t2.status <> 18 or t2.date < date '2015-01-01'