簡體   English   中英

對於一組sql查詢,如何確定哪個結果集包含某個行?

[英]For a set of sql-queries, how do you determine which result-set contains a certain row?

我有一組sql-查詢:

List<String> queries = ...
queries[0] = "select id from person where ...";
...
queries[8756] = "select id from person where ...";

每個查詢從同一表“ person”中選擇行。 唯一的區別是從句。 表“ person”看起來像這樣:

   id | name | ... many other columns

我如何確定哪些查詢的結果集中將包含某個人?

例如:

List<Integer> matchingQueries = magicMethod(queries, [23,45]); 

通過“ magicMethod”獲得的列表將過濾列表“ queries”(上面定義)中存在的所有sql查詢,並僅返回包含id為23的人或id為45的人的查詢。

我為什么需要它:我正在處理一個包含產品和類別的應用程序,其中類別是sql查詢,這些查詢定義了哪些產品屬於它們(查詢也存儲在表中)。 現在我有一個要求,管理員必須在創建項目后立即查看該項目所屬的所有類別。 順便說一句,定義了超過8000個類別(到目前為止,還會有更多類別)。

語言和數據庫:java && postgreSQL

謝謝,

我可以想到兩種方式。 第一種方法是創建一個包含兩個屬性的值對象QueryLong id查詢ID和List<Person>結果。 另一種方法是在結果中包含查詢ID。 例如

queries[0] = "SELECT id, name, etc, 0 AS query FROM person WHERE ...";
// ...
queries[8756] = "SELECT id, name, etc, 8756 AS query FROM person WHERE ...";

要么

queries[0] = "SELECT id, name, etc, %d AS query FROM person WHERE ...";
// ...
queries[8756] = "SELECT id, name, etc, %d AS query FROM person WHERE ...";

for (int i = 0; i < queries.length; i++) {
    String sql = String.format(queries[i], i);
    // ...
}

這樣您可以通過以下方式重新獲取它

int queryId = resultSet.getInt("query");

就是說,所有這些都有一點氣味( DRY )。 我建議重新考慮整個方法。 隨便問一個新問題: “我有功能要求XYZ,我已經按照以下方式進行了處理。對嗎?”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM