【问题标题】:Polymorphic association query multiple JOIN as separate columns多态关联查询多个 JOIN 作为单独的列
【发布时间】:2021-01-01 19:07:14
【问题描述】:

我正在尝试提取一个需要在 SQL 中访问多态关联表两次的查询(我需要在两个“类型”上都加入它)

这是 SQL 表的结构。

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”表中查询每个单独的答案,在 User.id == Answer.user_id 上使用“User”表进行内部联接,并使用“UserGroup”表进行内部联接以获得那些的“group_id”使用 usergroupable_type == 'User' 和 usergroupable_id == User.id 这样我就可以加入 'Group' 表以获取 Group.name。

之后,我想通过连接 usergroupable_type == 'AdminUser' 上的多态 'UserGroup' 表从 'AdminUser' 表中获取 AdminUser.name。

基本上,我想获取“Answer”表中每行的 Group.name、AdminUser.name。

【问题讨论】:

  • 样本数据、所需结果和适当的数据库标签都会让这一切变得更加清晰。

标签: sql polymorphic-associations


【解决方案1】:

如果我理解正确,那么类似

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 新手,所以我没有想到使用“加入用户组 aliased_name”,因此我收到一个错误,说我不能两次加入同一个表,谢谢!
  • 啊,太好了,很高兴它有帮助,是的,您可以在同一个表上加入任意多次,从根本上讲,SQL 都是关于定义和加入命名关系,其中名称隐含地是表的名称如果你省略了一个名字,你就是基于它。希望您在使用 SQL 时玩得开心 :-)
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 2010-10-15
  • 2018-10-31
  • 1970-01-01
  • 2017-07-20
  • 2019-07-28
  • 2010-11-07
  • 1970-01-01
相关资源
最近更新 更多