查询共享关联的两个表

时间:2017-08-15 21:54:27

标签: sql ruby sequel

seqeul和sql的新功能。我有两个表groupsresources,它们相关联many_to_many,因此有一个groups_resources联接表。我还有一个task表,其中包含foreign_key :group_id, :groups并且与many_to_one组相关联。

我试图弄清楚要使用哪个查询,这样我就可以根据任务组获取能够执行任务的资源。我是否必须通过`groups_resources'进行复杂的查询?加入表,还是有更直接的查询/方式来建立我的关联?

谢谢!

3 个答案:

答案 0 :(得分: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 = ?

答案 1 :(得分: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=<>;

答案 2 :(得分:0)

另外两个答案对于如何构建SQL查询很有帮助,但我想我会特别回答我自己的问题,因为它与Sequel有关。事实证明有一个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.resources个实例上调用Task之类的内容,即使您的表格未明确关联任务和资源。