用于互斥事件的Sql语句

时间:2011-09-20 05:09:25

标签: sql db2

我试图在iSeries上运行一个sql语句,它将根据我传入的类型参数输出retuls。

只是说mytable有一个名为field1的字段。 field1包含Y,N和NULL值。

一种'Y'应该只返回'Y'值。 一种'N'应该不返回'Y'值。 (即Null,N和该领域的任何其他垃圾)

我试过了......

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

然而,这不起作用。

1 个答案:

答案 0 :(得分: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'))

(请记住,短路逻辑使用SQL提供支持......)

请记住,null并不能真正与任何事物进行比较,而且最好还要指出实际上想要它的事实(在第二种情况下)。