如何根据第二个表中的数据限制SQL查询结果?

时间:2012-11-08 20:57:14

标签: sql jpa

我有一个包含USERS和GROUPS表的现有系统。我有用户和组的JPA对象。

表USERGROUPS是一个映射,用户在哪些组中,这个表没有映射到一个对象,我几乎就这样做了一个直接的SQL查询:

public List<User> getUsersByGroupId(long groupId) {
  List<User> users = new ArrayList<User>();
  String query = "select USERGROUPS.USER_ID from USERGROUPS where USERGROUPS.GROUP_ID = ?1";
  Query q = getEntityManager().createNativeQuery(query, Long.class);
  q.setParameter(1, groupId);
  List<Long> userIds = new ArrayList<Long>();
  usersIds.addAll(q.getResultList());
  for (Long id : userIds) {
    users.add(getUser(id));
  } 
  return users;
}

一切正常。

现在我有一个新的应用程序想要使用USERS表中的Users子集。

计划是添加一个名为MYAPP_USERS的新表(因为我们不想修改现有的表),该表包含一列,即在MYAPP中列出的用户的USER_ID。

所以我的问题是,如何修改我的查询只返回MYAPP_USERS表中组的成员?

也就是说,我该怎么做:

  String query = "select USERGROUPS.USER_ID from USERGROUPS where USERGROUPS.GROUP_ID = ?1 and WHERE ?1 IS IN MYAPP_USERS";

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

select USERGROUPS.USER_ID 
from   USERGROUPS 
where  USERGROUPS.GROUP_ID = ?1 
   AND EXISTS (SELECT * FROM MYAPP_USERS WHERE USER_ID = ?1)