1

複数の列を持つテーブルがあります。列 1 と 2 には、set={A,B,C, D} の 4 つのアルファ値のいずれかを含めることができます。

各列にセットの 2 つの値のいずれかが含まれているかどうかを確認したいと思います。したがって、このステートメントを単純化したいと思います。

SELECT * FROM MUTATION-TABLE WHERE (COLUMN1 = "A") OR (COLUMN2 = "A") OR (COLUMN3 = "A")
 OR (COLUMN1 = "B") OR (COLUMN2 = "B") OR (COLUMN3 = "B").

このステートメントを単純化する方法はありますか。列を追加すると、チェックするミューテーションが増えます。SQL ステートメントが長くなったり、繰り返しになっているのがわかります。

4

3 に答える 3

3

多数の列に対して 2 つの値しかない場合は、IN列のセットに切り替えて定数値を確認します。

SELECT *
FROM "MUTATION-TABLE"
WHERE 'A' IN (COLUMN1, COLUMN2, COLUMN3)
   OR 'B' IN (COLUMN1, COLUMN2, COLUMN3)

さらに列を追加すると、次のようになります。

SELECT *
FROM "MUTATION-TABLE"
WHERE 'A' IN (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5)
   OR 'B' IN (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5)

データベースに関する限り、クエリは同じである必要がありますが、このバージョンの方が読みやすいかもしれません。

于 2012-01-02T04:03:11.137 に答える
1

直接の等値チェックの代わりに、句でinaを使用できます。where例:

SELECT
    *
FROM
    mytable
WHERE
    col1 IN ("A", "B")
    OR col2 IN ("A", "B")
    OR col3 IN ("A", "B")
于 2012-01-02T03:56:17.023 に答える
0

他のすべての条件が同じであれば、DB 構造を変更して複数の列を削除すると思います。前もって少し手間がかかることは承知していますが、SQL の複雑さが大幅に軽減されます。追加の突然変異のために列を追加することをすでに検討しているという事実は、これが適切な方向であるという私の考えを補強するだけです.

例 - 既存の主キーが患者 ID であると仮定します。

新しいテーブル - 既存の変異 患者 ID - PK 変異タイプ - 文字

SQLは次のようになります

SELECT *
FROM MUTATION-TABLE
WHERE patientID IN (SELECT patienID 
                    FROM existing-mutations 
                    WHERE mutationType = "A")

これが役立つことを願っています。

于 2012-01-02T04:00:35.180 に答える