2014-10-02 8 views
0

Я хочу, чтобы создать запрос, который возвращает все группы с пользователями COUNT (включая пустые группы)Группы Включив пустые строки

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 

Но это не работает правильно. Он возвращает неправильное количество пользователей для пустых групп (возвращает пользователей count = 1 вместо 0).

Моя среда: Скала-2.11.2, ловкий-2.1.0, PostgreSQL

ответ

Смежные вопросы