我有以下 SQL 查询:
select AuditStatusId
from dbo.ABC_AuditStatus
where coalesce(AuditFrequency, 0) <> 0
我正在努力理解它。它看起来很简单,我知道合并运算符的作用(或多或少),但似乎没有得到意义。
除了上面的查询之外,在不知道其他信息的情况下,您认为这意味着什么?
我有以下 SQL 查询:
select AuditStatusId
from dbo.ABC_AuditStatus
where coalesce(AuditFrequency, 0) <> 0
我正在努力理解它。它看起来很简单,我知道合并运算符的作用(或多或少),但似乎没有得到意义。
除了上面的查询之外,在不知道其他信息的情况下,您认为这意味着什么?
select AuditStatusId
from dbo.ABC_AuditStatus
where AuditFrequency <> 0 and AuditFrequency is not null
请注意,使用 Coalesce 意味着无法正确使用索引来满足此查询。
COALESCE 是处理 NULL 值的 ANSI 标准函数,通过基于逗号分隔列表返回第一个非 NULL 值。这:
WHERE COALESCE(AuditFrequency, 0) != 0
..表示如果该列为AuditFrequency
NULL,则将值转换为零。否则,AuditFrequency
返回值。
由于比较不会返回AuditFrequency
列值为零的行,AuditFrequency
因此查询也将忽略为 NULL 的行。
看起来它旨在将空 AuditFrequency 检测为零,从而隐藏这些行。
据我所知,它会检查不是 0 或 null 的字段。
我认为它更准确地描述为:
select AuditStatusId
from dbo.ABC_AuditStatus
where (AuditFrequency IS NOT NULL AND AuditFrequency != 0) OR 0 != 0
我承认最后一部分永远不会做任何事情,也许我只是在迂腐,但对我来说,这更准确地描述了你的查询。
这个想法是,使用单个表达式来表达单个搜索条件是可取的,但这仅仅是风格,一个品味问题:
一种表达方式:
WHERE age = COALESCE(@parameter_value, age);
两种表达方式:
WHERE (
age = @parameter_value
OR
@parameter_value IS NULL
);
这是另一个例子:
一种表达方式:
WHERE age BETWEEN 18 AND 65;
两种表达方式
WHERE (
age >= 18
AND
age <= 65
);
就个人而言,我对单个表达式有强烈的个人偏好,并且发现它们更容易阅读......如果我熟悉使用的模式;)它们是否表现不同是另一回事......