seqeul和sql的新功能。我有两个表groups
和resources
,它们相关联many_to_many
,因此有一个groups_resources
联接表。我还有一个task
表,其中包含foreign_key :group_id, :groups
并且与many_to_one
组相关联。
我试图弄清楚要使用哪个查询,这样我就可以根据任务组获取能够执行任务的资源。我是否必须通过`groups_resources'进行复杂的查询?加入表,还是有更直接的查询/方式来建立我的关联?
谢谢!
答案 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
之类的内容,即使您的表格未明确关联任务和资源。