如果 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)
因为这不能编译,而且我不能在 WHERE
中使用 IF
子句,还有其他方法可以实现吗?
最佳答案
我们可以在 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) );
为了解决@HoneyBadger 的评论,如果 anothertable
上的子查询返回多条记录,那么如果我们使用 t.A = (subquery)
,此查询将出错。如果您打算使用 equals,则必须确保子查询仅返回一条记录。您关于使用 WHERE IN
的建议可能会解决问题。
关于sql - 根据 case 条件在 where 子句中添加不同的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019932/