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

ここでの「より良い」とは「タイピングが少ない」ことを意味すると思いますか?その場合は、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 に答える
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 に答える