sql - 将合并替换为 case

标签 sql database t-sql

如何重构此查询以便不存在 COALESCE 或 ISNULL?我可以更改它以使用 CASE 吗?还有其他方法可以重构吗?

SELECT * FROM MockDb WHERE 
COALESCE(Column1,0) = @value1 AND 
COALESCE(Column2,0) = @value2 AND 
COALESCE(Column3,0) = @value3 AND 
COALESCE(Column4,0) = @value4 AND 
COALESCE(Column5,0) = @value5

最佳答案

这似乎是奇怪的逻辑 - 将列中的 NULL 值视为“0”。

你可以写:

where (column1 = @value1 or @value1 = 0 and column1 is null) and
      (column2 = @value2 or @value2 = 0 and column2 is null) and
      . . . 

通常,需要关注的是允许参数使用 NULL 值。我希望看到如下逻辑:

where (column1 = @value1 or @value1 is null) and
      (column2 = @value2 or @value2 is null) and
      . . . 

此版本将参数中的 NULL 值视为“出于过滤目的忽略此列”。您的版本处理列本身中的 NULL 值。

关于sql - 将合并替换为 case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848810/

相关文章:

SQL查询对所有表中的列进行计数

mysql - 在 mysql 中使用 IN 获取结果时添加列

php - 如何检查字符串是否已存在于 SQL 数据库中

php - Opencart 禁用 Mysql/Php 错误显示

c# - 在更新查询中出现语法错误

mysql - 我应该使用哪种 MySQL 列类型来存储 13 位整数?

Android 在数据库中获取上下文

sql - 生成序列号

SQL Server - 在 XML 数据类型中存储换行符

sql-server-2008 - T-SQL 优化的条件连接