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

Java 如何在SQL(JPA)中使用带IN运算符的嵌套SELECT语句?,java,sql,oracle,jpa,Java,Sql,Oracle,Jpa,我想在java类中使用以下SQL查询: SELECT * FROM table1 WHERE attribute1 IN ( SELECT attribute1 FROM table2 WHERE attribute2 = c ) 这里,表1和表2是具有公共列attribute1的两个实体 如何将此查询的结果作为table1类型的列表获取?无法将结果作为table1类型的列表获取。 表是列的集合。Java列表只能包含一列的集合。 想象一下,表1包含5列不同的数据类型,比如INTE

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

SELECT * 
FROM table1
WHERE attribute1 IN (
  SELECT attribute1
  FROM table2
  WHERE attribute2 = c
)
这里,表1和表2是具有公共列attribute1的两个实体


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

无法将结果作为table1类型的列表获取。 表是列的集合。Java列表只能包含一列的集合。 想象一下,表1包含5列不同的数据类型,比如INTEGER、VARCHAR2、INTEGER、VARCHAR2、VARCHAR2。查询将返回一个包含所有这些值的结果集。 现在,您需要一个简单的列表来存储所有这些值。这是不对的。 如果要存储特定列的所有值,则可以按如下所示执行

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.getXXXTry与table2.attribute1一起使用。如果您在SQL developer中使用此SQL,您的实际结果是什么?您希望它是什么?请在你的帖子中添加一些示例输出。因此,我们现在了解您当前的起点和期望的目标。如果它解决了您的问题,请接受答案。