Как определить, какой набор результатов содержит определенную строку для набора sql-запросов? - PullRequest
1 голос
/ 07 апреля 2010

У меня есть набор sql-запросов:

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

Каждый запрос выбирает строки из той же таблицы 'person'.Единственная разница заключается в предложении where.Таблица «персона» выглядит следующим образом:

   id | name | ... many other columns

Как определить, какие запросы будут содержать определенного человека в наборе результатов?

Например:

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

Список, полученный с помощью «magicMethod», фильтрует все sql запросы, присутствующие в списке «запросов» (определенные выше), и возвращает только те, которые содержат либо человека с идентификатором 23, либо человека с идентификатором 45.это нужно: я имею дело с приложением, которое содержит продукты и категории, где категории представляют собой SQL-запросы, которые определяют, какие продукты принадлежат им (запросы также хранятся в таблице).Теперь у меня есть требование, когда администратор должен видеть все категории, к которым относится элемент, сразу после его создания.Между прочим, определено более 8.000 категорий (на данный момент еще больше).

язык и базы данных: java && postgreSQL

Спасибо,

1 Ответ

0 голосов
/ 07 апреля 2010

Я могу придумать 2 способа. Первый способ - создать объект значения Query, который содержит два свойства: Long id идентификатор запроса и List<Person> результаты. Другой способ - включить идентификатор запроса в результаты. Э.Г.

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, я подошел к нему следующим образом. Это правильно?» .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...