2011-09-20 60 views
0

Sql語句我想上,將基於一個類型參數我通過。爲互斥事件

輸出retuls在iSeries運行SQL語句只是說MYTABLE有一個名爲Field 1字段。 field1包含Y,N和NULL值。

'Y'類型應返回'Y'值。 「N」類型不應返回「Y」值。 (即空,N和在該領域的任何其他垃圾)

我想這...

 select * 
      from mytable 
      where field1 in case when :type = 'Y' then 'Y' 
       else (select field1 from mytable where field1 <> 'Y') end 

但是,這是行不通的。

回答

1

我相信你正在尋找的邏輯是這樣的:

SELECT * 
FROM myTable 
WHERE (:type = 'Y' AND field1 IS NOT null AND field1 = 'Y') 
    OR (:type <> 'Y' AND (field1 IS null OR field1 <> 'Y')) 

(記住一個事實,即短路邏輯 garuanteed與SQL ......)

記住null並沒有真正與任何事物相比較,最好能夠說出你實際上想要它(在第二種情況下)。

+0

+1我不敢相信我忘記了查詢的另一面 –