3
我是數據庫和SQL的新手,並嘗試從3天開始解決此問題。我有一個用JDBC查詢SQLite數據庫的Java應用程序。迄今爲止,這工作非常好。但我無法弄清楚我需要檢索所需的行的SQL查詢。該表是這樣的:SQL - 選擇具有大多數匹配列的行
rowid | application | dstIP | dstPort | value_to_return
| | | |
0 | NULL | NULL | NULL | 26
1 | NULL | NULL | 80 | 1
2 | NULL | 192.168.178.31 | NULL | 2
3 | NULL | 192.168.178.31 | 80 | 3
4 | firefox | NULL | NULL | 4
5 | firefox | NULL | 80 | 5
6 | firefox | 192.168.178.31 | NULL | 6
7 | firefox | 192.168.178.31 | 80 | 7
我的目標是讓大多數comlumns匹配,如果不匹配列第0行應選擇行。 這裏是一些例子:
input -> row
firefox 192.168.178.31 80 -> 7
chrome 192.168.178.31 81 -> 2
chrome 192.168.178.30 82 -> 0
someapp 192.168.178.29 80 -> 1
我最好的猜測到目前爲止,這是查詢
SELECT * FROM table WHERE (application IS ? OR application IS NULL)
AND (dstIP IS ? OR dstIP IS NULL)
AND (dstPort IS ? OR dstPort IS NULL)
ORDER BY application;
在S與相應的輸入值替換?如果不匹配,此查詢返回行0。但是如果有幾個匹配,它會返回幾行當然。
我可以在Java應用程序中選擇所需的行,但我希望數據庫能夠爲我工作。
如果存儲過程對於這個問題是更好的選擇,我可以改變數據庫,因爲SQLite不支持這個。
我希望我能夠足夠精確地描述問題。任何幫助將不勝感激。
它看起來不錯,但我無法測試它。它說WHERE附近的語法錯誤。我對SQL很有經驗:( – BusDriverJoe
Ups ...更正了基本語法錯誤,現在就試試! –
我正在測試內部SELECT,看起來當一列沒有匹配時,因爲ELSE NULL分支,所以匹配列應該是2,但是它是NULL,但是我得到了這個基本的想法,給我一段時間=) – BusDriverJoe