SQL条件筛选器具有不同的值

时间:2011-10-05 15:40:25

标签: sql

我在where子句中发现了许多关于coniditonal过滤的帖子,但它们似乎都是基于使用相同的值,例如:

WHERE  (o.OrderID = @orderid OR @orderid IS NULL)

我需要做一些稍微不同的事情,我需要删除一个过滤器,它的值完全基于另一个值,所以类似于:

select *
from tableA
where 1 = 1
case when a = 1 then
   and b in (select b from tableB)
else
  -- do nothing
end

我知道上面的内容是不被允许的,我只是写作我要做的事情的一个例子。有没有人知道这样做的好方法?我知道我可以使用if语句并复制查询,但它很大,我试图避免这种情况。

由于

2 个答案:

答案 0 :(得分:2)

SELECT *
    FROM tableA
    WHERE a <> 1
        OR (a = 1 AND EXISTS(SELECT b from TableB WHERE tableA.b = TableB.b))

您也可以将其写为:

SELECT tableA.*
    FROM tableA
        LEFT JOIN tableB
            ON tableA.b = tableB.b
    WHERE tableA.a <> 1
        OR (tableA.a = 1 AND tableB.b IS NOT NULL)

答案 1 :(得分:0)

“更正”您的WHERE条款:

select *
  from tableA
 where 'T' = case 
                when a = 1 then case
                                   when b in (select b from tableB) then 'T'
                                end
                else 'T'
             end;