2017-08-15 49 views
0

通常对seqeul和sql有新意。我有两个表,groupsresources,这是关联many_to_many,因此有一个groups_resources连接表。我还有一个task表,它有一个foreign_key :group_id, :groups,并与many_to_one关联在一起。在共享关联的两个表之间查询

我想弄清楚什么查询使用,这将允许我得到的资源,能够做任务,基于任务的组。我是否必须通过`groups_resources'连接表执行复杂的查询,还是有更直接的查询/设置我的关联的方式?

谢谢!

回答

1

我会像下面那样构造SQL语句。它将通过连接表为您提供与特定任务ID关联的资源对象。

SELECT r.* 
FROM resources r 
JOIN groups_resources gr ON gr.resources_id = r.id 
JOIN groups g ON gr.group_id = g.id 
JOIN task t ON t.id = g.id 
WHERE t.id = ? 
0

我认为以下就足够了:

select res.* from resources res, task tk, groups_resources gr 
where res.resource_id = gr.resource_id and 
gr.group_id = tk.group_id and 
tk.group_id=<>; 
0

其他两个答案是如何构建一个SQL查询有益的,但想到我会专门回答我的问题,因为它涉及到续集。原来有一个many_through_many插件,使得这种查询简单的,如果你把两个表many_to_many

Task.plugin :many_through_many 
Task.many_through_many :resources, 
    :through =>[ 
    [:groups_tasks, :task_id, :group_id], 
    [:groups, :id, :id], 
    [:groups_resources, :group_id, :resource_id] 
    ] 

现在你只需拨打像task.resourcesTask情况下,即使你的表不明确关联任务和资源。