2011-09-20 55 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我不敢相信我忘记了查询的另一面 –