如果列A
不为空,我应该添加一个条件,如果它是空的,那么我应该添加另一个条件。像这样:
select *
from table t
where case when len(t.A) > 0 then t.A = (select B from anothertable )
else t.C = (select D from anothertable)
由于这不能编译,我无法在IF
中使用WHERE
子句,还有其他方法可以实现这一目标吗?
答案 0 :(得分:5)
我们可以在WHERE
子句中重新登录以使其正常工作:
SELECT *
FROM table_t
WHERE
(LEN(t.A) > 0 AND t.A IN (SELECT B FROM anothertable) ) OR
(LEN(t.A) <= 0) AND t.C IN (SELECT D FROM anothertable) );
如果anothertable
上的子查询返回多条记录,要解决@HoneyBadger的注释,如果我们使用t.A = (subquery)
,则此查询会出错。如果您打算使用equals,那么您必须确保子查询仅返回单个记录。您使用WHERE IN
的建议可能会解决问题。