2014-01-09 63 views
1

它很難解釋什麼是我的意思是使用單詞這樣生病寫一個查詢類似於我現在有什麼。oracle查詢 - 其他條件取決於一個字段

SELECT * 
FROM table t 
WHERE t.something = 'something' 
    AND CASE WHEN t.name = 'john' THEN 'smith' ELSE t.lastname END = t.lastname 

Basicly取決於如果一個字段是什麼,我想這是(名字=約翰)我想添加另一個條件(姓氏=史密斯)。如果該字段不是我想要的(name!= john),那麼不需要任何條件(lastname可以是任何內容) 這段代碼可以工作,但對我來說它似乎是一種破解。我的問題是,如果這可以做得更容易或更嬌俏?感謝提前:)

回答

4

你可以做到這一點,而不case

WHERE t.something = 'something' AND 
     (t.lastname = 'smith' or t.name <> 'john') 
1

您可以將整個測試CASE語句中:

AND CASE WHEN t.name = 'john' THEN t.lastname = 'smith' ELSE True 

(我不記得我的Oracle這麼好True在這裏不可能是正確的說法。)

現在CASE的結果是一個真值,而不是要根據t.lastname進行測試的值。

1

它等效於:

WHERE 
    t.name = 'john' AND t.lastname = 'smith' 
    OR t.name <> 'john' 
相關問題