如何在 SQL (JPA) 中使用带有 IN 运算符的嵌套 SELECT 语句?
Posted
技术标签:
【中文标题】如何在 SQL (JPA) 中使用带有 IN 运算符的嵌套 SELECT 语句?【英文标题】:How to use nested SELECT statements with IN operator in SQL (JPA)? 【发布时间】:2020-01-06 19:56:14 【问题描述】:我想在我的 java 类中使用以下 SQL 查询:
SELECT *
FROM table1
WHERE attribute1 IN (
SELECT attribute1
FROM table2
WHERE attribute2 = c
)
这里table1
和table2
是两个具有公共列 attribute1
的实体。
如何将查询的结果作为table1
类型的列表获取?
【问题讨论】:
试试table2.attribute1
如果您在 SQL-developer 中使用此 SQL,您的实际结果是什么,您期望它是什么?请edit您的帖子提供一些示例输出。所以我们现在是您当前的起点和期望的目标。
【参考方案1】:
您无法将结果作为 table1 类型的列表。
表是列的集合。 Java List 只能包含一列的集合。
想象一下table1
包含 5 列不同的数据类型(比如 INTEGER、VARCHAR2、INTEGER、VARCHAR2、VARCHAR2)。您的查询将返回包含所有这些值的 ResultSet
。
现在,您期望一个简单的 List 来存储所有这些值。这是不正确的。
如果要存储特定列的所有值,则可以如下所示进行。
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 等。
【讨论】:
如果它解决了您的问题,请接受答案。以上是关于如何在 SQL (JPA) 中使用带有 IN 运算符的嵌套 SELECT 语句?的主要内容,如果未能解决你的问题,请参考以下文章
JPA 如何获取 Criteria API 中使用的参数标记的数量?