如何使用 Kotlin Exposed Framework 从依赖于 Ktor 中的两个或多个条件的多对多关系查询实体?

How to query an Entity from a Many-to-Many realtionship dependendt on two ore more conditions in Ktor with the Kotlin Exposed Framework?

我有 3 个实体:

User
id: Int
name: String
Room
id: Int
name: String
RoomUser
id: Int
room_id: Int (Reference on Room.id)
user_id: Int (Reference on User.id)

现在假设我们有 2 个房间和 3 个用户:

房间:

id name
1 Room1
2 Room2

用户:

id name
3 User3
7 User7
9 User9

房间用户:

id room_id user_id
1 1 3
2 1 7
3 2 7
4 2 9

如您所见,User3User7在房间Room1User7User9 在房间 Room2.

在我的用例中,我给出了例如 2 个用户。现在我想得到这两个用户所在的房间。

在这种情况下,当我给了用户 User3User7 我想得到房间 Room1 或者当我给了用户 User7User9 我想得到房间 Room2.

如何使用 Kotlin Exposed Framework 编写查询来获取这个特定的房间?

在 SQL 符号中应该是这样的:

SELECT room_id
FROM RoomUsers
where user_id in (3,7)
GROUP BY room_id
HAVING count(*) = 2

暴露在外:

RoomUsers
  .slice(RoomUsers.roomId)
  .select{
     RoomUsers.userId inList listOf(User3.id, User7.id)
  }
  .groupBy(RoomUsers.roomId)
  .having {
    RoomUsers.userId.count() eq 2
  }.map {
    it[RoomUsers.roomId]
  }