更好的条件列查询方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更好的条件列查询方法相关的知识,希望对你有一定的参考价值。

--OldQuery
SELECT oldStartDate AS column,...
FROM Table
WHERE
oldStartDate > @date,...
GROUP BY
oldStartDate,...

在表中添加了一个新的列newStartDate nullable,数据提取必须有条件地依赖于此列

--NewQuery
SELECT ISNULL(newStartDate, oldStartDate) AS column,...
FROM Table
WHERE
(    
    (newStartDate IS NULL AND oldStartDate > @date)
    OR 
    (newStartDate > @date)
),...
GROUP BY
ISNULL(newStartDate, oldStartDate),...

以上是我可以想到的有条件检索的方法,但在我看来它会导致性能问题,我无法在DEV环境中评估,因为数量不够大,但产量估计大约2mil记录。想知道是否有其他推荐的方法呢?

答案

如果你打算在ISNULL条款中使用GROUP BY,你也可以在WHERE条款中使用,因为两者都会使newStartDate无法解决,because the column is nullable.(感谢链接,John Cappelletti!)

假设NewStartDate将替换OldStartDate,您可以做的一件事是将newStartDate中的所有空值更新为oldStartDate的非空值,然后将您的newStartDate列更改为不可为空的列:

UPDATE TableName
SET NewStartDate = OldStartDate
WHERE NewStartDate IS NULL;
GO

ALTER TABLE TableName
    ALTER COLUMN NewStartDate date NOT NULL;
GO

然后您的查询可以更简单和更可靠:

SELECT NewStartDate AS column,...
FROM Table
WHERE
NewStartDate > @date,...
GROUP BY
NewStartDate ,...

以上是关于更好的条件列查询方法的主要内容,如果未能解决你的问题,请参考以下文章

若依vue实现动态表格,可动态查询条件,控制列的显示隐藏及操作权限

ruby 我的博客文章“Rails中更好的条件验证”的片段

在 NHibernate 查询中实现条件的更好方法是啥?

计算列,有没有比我的子查询更好的方法

在NHibernate查询中实现条件的更好方法是什么?

使用python替换电源查询列中的值? [关闭]