4

我无法以一种或另一种方式找到答案。非常简单的问题,细节很少。

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

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

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

4

3 回答 3

1

我认为这是最好的方法。据我了解,没有其他方法可以实现这一目标。

于 2012-10-04T14:51:09.257 回答
0

关于我能想到的唯一一件事(它只在某些情况下才有用)是将一个持久计算字段添加到使用如下逻辑的表本身。对于高度事务性的表,我不会推荐这种方法,如果这是在许多地方并且经常使用的过滤器,我什至会考虑它。获得的是您可以过滤和索引的单个值,因此 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 
于 2012-10-04T15:50:53.940 回答
0

我认为这里的“更好”意味着“更少打字”?如果是这样,您可以使用 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%'

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

于 2012-10-04T16:58:06.973 回答