我有一个包含多个列的表。第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语句变长/重复。
答案 0 :(得分:3)
如果您只有两个值但有很多列,请切换到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)
就数据库而言,查询应该是相同的,但这个版本可能更具可读性。
答案 1 :(得分:1)
您可以在in
子句中使用where
,而不是直接相等检查。例如:
SELECT
*
FROM
mytable
WHERE
col1 IN ("A", "B")
OR col2 IN ("A", "B")
OR col3 IN ("A", "B")
答案 2 :(得分:0)
所有其他条件相同,我想我会修改数据库结构以消除多列。虽然我知道这可能是一些预先工作,但它将极大地降低SQL的复杂性。您已经在考虑为其他突变添加更多列的事实只会强化我的想法,即这是正确的方向。
示例 - 假设您现有的主键是patientID。
新表 - 现有突变 patientID - PK mutationType - char
然后SQL变为
SELECT *
FROM MUTATION-TABLE
WHERE patientID IN (SELECT patienID
FROM existing-mutations
WHERE mutationType = "A")
我希望这会有所帮助。