sql - 根据 case 条件在 where 子句中添加不同的条件

标签 sql sql-server

如果 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/

相关文章:

php - 将 2 个 mysql 查询合并为 1

mysql - 在同一个 mysql 表中的 INSERT INTO 之后获取最后插入的 id(s) 的列表

sql-server - 如何管理事务内运行的SP中的全局临时表?

sql - 某些列中的结果为空

sql-server - 需要有关在SQL Server上使用SqlBulkCopy插入信封的建议

sql-server - 获取 12 月 31 日的正确周数

mysql - 如何使用存储过程租用车辆

MySQL 触发器。如何在有限的时间内存储表中的每一行数据?

mysql - 选择删除分类广告最多的用户以及分类广告数量

mysql - 从 MS SQL 插入 MySQL