2016-03-14 42 views
-1

測試表SQLite的最大匹配的行由多列與價值

ID a b c d e (f to z) 
-------------------------------- 
0 2 7 9 0 8 ... 
1 4 5 6 3 0 ... 
2 1 5 6 2 9 ... 
3 1 0 8 2 3 ... 
4 2 1 6 9 5 ... 
5 1 5 6 2 3 ... 
6 2 3 4 1 0 ... 

我想找到最匹配的列到我的查詢行。我現在已經是

select ID from test where a = 1, b = 5, c = 6, d = 2, e = 3, ... (same with f to z) 

從樣品所需的輸出上面就是:5,2,3,1,4

我怎樣寫這樣的查詢?

回答

1

要找到多個列上最接近的匹配,最簡單的方法可能是計算列明智匹配的數量,然後按降序排列。

SELECT ID 
FROM myTable 
ORDER BY 
    CASE WHEN a = 1 THEN 1 ELSE 0 END + 
    CASE WHEN b = 5 THEN 1 ELSE 0 END + 
    CASE WHEN c = 6 THEN 1 ELSE 0 END + 
    CASE WHEN d = 2 THEN 1 ELSE 0 END + 
    CASE WHEN e = 3 THEN 1 ELSE 0 END DESC; 

# ID: 5 2 3 1 4 0 6 

An SQLfiddle to test with

+0

非常感謝...我解決了我的問題.. –

+1

布爾表達式已經返回1/0; '如果b = 5那麼1則ELSE 0 END'與'(b = 5)'相同。 –

+0

@CL。啊,不知道SQLite與MySQL有相同的「鬆散類型」布爾值。比如PostgreSQL只會總結布爾值。 –