我试图在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
然而,这不起作用。
答案 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
并不能真正与任何事物进行比较,而且最好还要指出实际上想要它的事实(在第二种情况下)。