我无法以这种方式找到答案。非常简单的问题,细节很少。
有没有更好的方法来做这样的事情:
SELECT *
FROM tablename tn
WHERE tn.col1 = 1
AND tn.col2 = 1
AND tn.col3 = 1
AND tn.col4 = 1
...
AND tn.coln = 1
多列必须以相同的方式与单个常量进行比较?
答案 0 :(得分:1)
我认为这是最好的方法。按照我的理解,没有其他更好的方法来实现这一目标。
答案 1 :(得分: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
答案 2 :(得分: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%'
但请记住,您花费更多时间阅读代码而不是编写代码,因此最重要的是查询的含义应尽可能容易理解,并且您当前的查询已经非常明确。