SQLITE3化合物;选择";陈述

SQLITE3化合物;选择";陈述,sql,select,sqlite,simplify,Sql,Select,Sqlite,Simplify,我有一个有几列的表。列1和列2可以包含四个alpha值中的任意一个:set={A,B,C,D} 我想检查每一列是否包含集合中的两个值中的任何一个。所以我想简化一下这句话: SELECT * FROM MUTATION-TABLE WHERE (COLUMN1 = "A") OR (COLUMN2 = "A") OR (COLUMN3 = "A") OR (COLUMN1 = "B") OR (COLUMN2 = "B") OR (COLUMN3 = "B"). 有没有办法简化这句话。随着我添

我有一个有几列的表。列1和列2可以包含四个alpha值中的任意一个:set={A,B,C,D}

我想检查每一列是否包含集合中的两个值中的任何一个。所以我想简化一下这句话:

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

有没有办法简化这句话。随着我添加更多的列,将有更多的突变需要检查。我可以看到SQL语句越来越长/重复。

您可以在
where
子句中使用
in
,而不是直接进行相等性检查。例如:

SELECT
    *
FROM
    mytable
WHERE
    col1 IN ("A", "B")
    OR col2 IN ("A", "B")
    OR col3 IN ("A", "B")

您可以在
where
子句中使用
in
,而不是直接进行相等性检查。例如:

SELECT
    *
FROM
    mytable
WHERE
    col1 IN ("A", "B")
    OR col2 IN ("A", "B")
    OR col3 IN ("A", "B")

在其他条件相同的情况下,我想我应该修改DB结构以消除多个列。虽然我知道这可能是一项前期工作,但它将大大降低SQL的复杂性。事实上,您已经在考虑为额外的突变添加更多的列,这只会强化我的想法,即这是正确的方向

示例-假设您现有的主键是patientID

新表-现有突变 patientID-PK 突变类型-字符

然后,SQL变成

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

我希望这能有所帮助。

在其他条件相同的情况下,我想我应该修改DB结构以消除多个列。虽然我知道这可能是一项前期工作,但它将大大降低SQL的复杂性。事实上,您已经在考虑为额外的突变添加更多的列,这只会强化我的想法,即这是正确的方向

示例-假设您现有的主键是patientID

新表-现有突变 patientID-PK 突变类型-字符

然后,SQL变成

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

我希望这会有所帮助。

如果您只有两个值,但有很多列,请切换到中的
,并在一组列中检查常量值:

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)

就数据库而言,查询应该是相同的,但此版本可能更具可读性。

如果只有两个值,但有很多列,则切换到
中的
,并在一组列中检查常量值:

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)
就数据库而言,查询应该是相同的,但是这个版本可能更可读