2012-01-02 71 views
1

我有一個有幾列的表。第1列和第2列可以包含四個alpha值中的任何一個:set = {A,B,C,D}。SQLITE3複合「選擇」語句

我想檢查每列是否包含這兩個值中的任何一個。所以,我希望能夠簡化這一說法:

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

有沒有一種方法來簡化這一說法。隨着我添加更多列,將會有更多突變進行檢查。我可以看到SQL語句變長/重複。

回答

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

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

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

所有其他的事情都是平等的,我想我會修改數據庫結構以消除多列。雖然我知道這可能是一個預先工作,但它會顯着降低SQL的複雜性。事實上,你已經在考慮增加更多的列來增加突變,這隻會加強我的想法,即這是正確的方向。

示例 - 假定您的現有主鍵是patientID。

新表 - 現有的突變 patientID - PK mutationType - 炭

的SQL就變成

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

我希望這有助於。