与相同常量进行比较的 n 列的快捷方式方法



我找不到这样或那样的答案。非常简单的问题,细节很少。

有没有更好的方法来做这样的事情:

SELECT *
FROM tablename tn
WHERE tn.col1 = 1
      AND tn.col2 = 1
      AND tn.col3 = 1
      AND tn.col4 = 1
      ...
      AND tn.coln = 1

其中多个列都必须以相同的方式与单个常量进行比较?

我认为这是

最好的方法。根据我的理解,没有其他方法可以实现这一目标。

关于我唯一能想到的(它只在某些情况下有用)是将一个持久计算字段添加到使用如下逻辑的表本身。 对于高度事务性的表,我不建议使用这种方法,并且只有在许多地方和经常使用过滤器时才考虑它。获得的是您可以过滤和索引的单个值,以便优化 SELECT。

ALTER TABLE [tablename] 
   ADD SAMEVALUE AS (CASE WHEN col1 = col2 AND col1 = col3 
       AND col1 = col4 AND .. col1 = coln THEN col1 ELSE NULL) PERSISTED 

我认为这里的"更好"意味着"更少的打字"?如果是这样,你可以通过使用Intellisense或做同样事情的第三方工具来加快速度,或者如果你有大量的列,那么使用你最喜欢的脚本语言(Perl,Python,PowerShell等)为你生成WHERE子句。你甚至可以使用 SQL 本身:

select 'tn.' + quotename(name) + ' = 1 and '
from sys.columns
where object_id = object_id('MyTable')
and name like 'col%'

但请记住,你花在阅读代码上的时间比写代码要多得多,所以最重要的是查询的含义应该尽可能容易理解,你当前的查询已经非常清晰了。

相关内容

最新更新