0

ユーザー数のあるすべてのグループ (空のグループを含む) を返すクエリを作成したい

SELECT g.id, count(relation.user_id) FROM groups g 
   FULL JOIN users2groups relation ON g.id=r.group_id 
GROUP BY g.id;

このモデルの場合:

class Users(tag: Tag) extends Table[User](tag, "users") {
   def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
   ...
}
class Groups(tag: Tag) extends Table[Group](tag, "groups") {
   def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
   ...
}

val users = TableQuery[Users]
val groups = TableQuery[Groups]

/** relation for users and group */
class Users2Groups(tag: Tag) extends Table[(Long,Long)](tag, "users2groups") {
    def userId = column[Long]("user_id")
    def groupId = column[Long]("group_id")
    def user = foreignKey("user_fk", userId, users)(_.id)
    def group = foreignKey("group_fk", groupId, groups)(_.id)
    def * = (userId, groupId)
    def ? = (userId.?, groupId.?)
    def pk = primaryKey("pk_user2group", (userId, userId))
}

これは、滑らかな私のソリューションです:

val query = for {
    (g, rel) <-
      groups leftJoin
      users2groups on (_.id === _.groupId)
} yield (g, rel.groupId.?)

val result = query.groupBy(_._1.id).map(e => (e._1, e._2.length)).list

result foreach println

しかし、正しく動作しません。空のグループに対して誤ったユーザー数を返します (0 ではなく、ユーザー数 = 1 を返します)。

私の環境:scala-2.11.2、slick-2.1.0、PostgreSQL

4

1 に答える 1

1

何が悪いのかわかりません。スリックバグである可能性があります。ここで報告してください: https://github.com/slick/slick

于 2014-10-02T23:54:38.453 に答える