在共享关联的两个表之间查询
Querying between two tables that share an association
seqeul 的新手和一般 sql。我有两个 table,groups
和 resources
,它们关联 many_to_many
,因此有一个 groups_resources
加入 table。我还有一个 task
table,它有一个 foreign_key :group_id, :groups
并且与 many_to_one
相关联。
我正在尝试弄清楚使用什么查询可以让我根据任务组获取能够执行任务的资源。我是否必须通过“groups_resources”连接 table 进行复杂的查询,或者是否有更直接的查询/方式来设置我的关联?
谢谢!
我会按如下方式构建 SQL 语句。这将通过连接 table.
为您提供与特定任务 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 = ?
我认为以下就足够了:
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=<>;
其他两个答案对于如何构造 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
实例上调用 task.resources
之类的东西,即使您的表没有明确关联任务和资源。
seqeul 的新手和一般 sql。我有两个 table,groups
和 resources
,它们关联 many_to_many
,因此有一个 groups_resources
加入 table。我还有一个 task
table,它有一个 foreign_key :group_id, :groups
并且与 many_to_one
相关联。
我正在尝试弄清楚使用什么查询可以让我根据任务组获取能够执行任务的资源。我是否必须通过“groups_resources”连接 table 进行复杂的查询,或者是否有更直接的查询/方式来设置我的关联?
谢谢!
我会按如下方式构建 SQL 语句。这将通过连接 table.
为您提供与特定任务 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 = ?
我认为以下就足够了:
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=<>;
其他两个答案对于如何构造 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
实例上调用 task.resources
之类的东西,即使您的表没有明确关联任务和资源。