Как использовать вложенные операторы SELECT с оператором IN в SQL (JPA)? - PullRequest
0 голосов
/ 06 января 2020

Я хочу использовать следующий SQL запрос в моем java классе:

SELECT * 
FROM table1
WHERE attribute1 IN (
  SELECT attribute1
  FROM table2
  WHERE attribute2 = c
)

Здесь table1 и table2 - это две сущности, имеющие общий столбец attribute1.

Как получить результат этого запроса в виде списка типа table1?

1 Ответ

0 голосов
/ 07 января 2020

Вы не можете получить результат в виде списка типа table1. Таблица представляет собой набор столбцов. Java Список может содержать только коллекцию из одного столбца. Представьте, что table1 содержит 5 столбцов разных типов данных (например, INTEGER, VARCHAR2, INTEGER, VARCHAR2, VARCHAR2). Ваш запрос вернет ResultSet, содержащий все эти значения. Теперь вы ожидаете, что простой список будет хранить все эти значения. Это не правильно. Если вы хотите сохранить все значения определенного столбца, вы можете сделать это, как показано ниже.

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table1 WHERE attribute1 IN (SELECT attribute1 FROM table2 WHERE attribute2 = c)");
List<String> attr = new ArrayList<String>();

while (rs.next()) {
    attr.add(rs.getString("attribute1"));
}

Если вы хотите sh получить значения другого столбца, тогда используйте rs.getXXX("<column_name"); для извлечения его детали. Примечание. Замените getXXX на соответствующий метод, основанный на типе данных столбца. Например, getString () для VARCHAR, getInt () для INTEGER et c.

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