私はデータベースとSQLが初めてで、3日以来この問題を解決しようとしています。JDBC を使用して SQLite データベースにクエリを実行する Java アプリケーションがあります。これはこれまでのところ非常にうまく機能します。しかし、目的の行を取得するために必要な 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
私の目標は、ほとんどのコムラムが一致する行を取得することです。一致する列がない場合は、行 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 はそれをサポートしていないため、ストアド プロシージャがこの問題に適している場合は、データベースを変更できます。
問題を十分に正確に説明したことを願っています。どんな助けでも大歓迎です。