多态关联查询多个 JOIN 作为单独的列
Polymorphic association query multiple JOIN as separate columns
我正在尝试提取需要访问 SQL 中的多态关联 table 两次的查询(我需要在两个 'types' 上加入它)
这是 SQL table 的结构。
Answer: id, user_id
UserGroup (polymorphic): usergroupable_type, usergroupable_id, group_id
User (polymorphic column groupable_type: 'User'): id, name
AdminUser (polymorphic column groupable_type: 'AdminUser') : id, name
Group: id, name
我想查询 'Answer' table 中的每个单独答案,在 User.id == Answer.user_id 上与 'User' table 进行内部联接], 并与 'UserGroup' table 进行内部连接以获得 usergroupable_type == 'User' 和 usergroupable_id == [=32 的 'group_id' =] 这样我就可以加入 'Group' table 以获得 Group.name.
之后,我想通过连接 [=39] 上的多态 'UserGroup' table 从 'AdminUser' table 获得 AdminUser.name =] == 'AdminUser'.
基本上,我想在 'Answer' table.
中获取每行 Group.name、AdminUser.name
如果我没看错,那就是
select g.name, au.name from answer a join usergroup ug on ug.usergroupable_id = a.user_id and ug.usergroupable_type = 'User' join group g on g.id = ug.group_id join usergroup aug on aug.group_id = g.id and usergroupable_type = 'AdminUser' join adminuser au on au.id = aug.usergroupable_id
应该这样做,但如果我误解了可能会分享一些示例数据
我正在尝试提取需要访问 SQL 中的多态关联 table 两次的查询(我需要在两个 'types' 上加入它)
这是 SQL table 的结构。
Answer: id, user_id
UserGroup (polymorphic): usergroupable_type, usergroupable_id, group_id
User (polymorphic column groupable_type: 'User'): id, name
AdminUser (polymorphic column groupable_type: 'AdminUser') : id, name
Group: id, name
我想查询 'Answer' table 中的每个单独答案,在 User.id == Answer.user_id 上与 'User' table 进行内部联接], 并与 'UserGroup' table 进行内部连接以获得 usergroupable_type == 'User' 和 usergroupable_id == [=32 的 'group_id' =] 这样我就可以加入 'Group' table 以获得 Group.name.
之后,我想通过连接 [=39] 上的多态 'UserGroup' table 从 'AdminUser' table 获得 AdminUser.name =] == 'AdminUser'.
基本上,我想在 'Answer' table.
中获取每行 Group.name、AdminUser.name如果我没看错,那就是
select g.name, au.name from answer a join usergroup ug on ug.usergroupable_id = a.user_id and ug.usergroupable_type = 'User' join group g on g.id = ug.group_id join usergroup aug on aug.group_id = g.id and usergroupable_type = 'AdminUser' join adminuser au on au.id = aug.usergroupable_id
应该这样做,但如果我误解了可能会分享一些示例数据