如何在 SQL (JPA) 中使用带有 IN 运算符的嵌套 SELECT 语句?



我想在我的java类中使用以下SQL查询:

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

这里table1table2是两个具有公共列attribute1的实体。

如何获取此查询的结果作为类型table1的列表?

无法将结果作为 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"));
}

如果您希望获取不同列的值,请使用rs.getXXX("<column_name");获取其详细信息。注意:根据列的数据类型将getXXX替换为适当的方法。例如,getString(( 代表 VARCHAR,getInt(( 代表 INTEGER 等。

最新更新