是否可以在 Sequel 中执行自连接?
Is it possible to execute a self join in Sequel?
我在一个出版物管理应用程序中工作。根据业务逻辑,如果一个出版物的文本具有等于或高于 75% 的相似度,则该出版物可以属于另一个出版物。因此,在数据库中,我在 publications
table.
上创建了一个自我关系
到目前为止,我有以下完美运行的查询:
SELECT
publications.id, publications.body,
similar_publications.id similar_id, similar_publications.body similar_body
FROM publications
LEFT JOIN publications similar_publications
ON similar_publications.id = publications.publication_id
WHERE publications.id = <an-id-here>;
问题是我想 "convert" 这个查询到 Sequel 的 DSL,以便以这样的方式简单地调用我的模型:Publication.including_similar_publications.where('publications.id = ?', 1)
我知道我需要在我的模型中创建这个方法。我的疑问是:如何?在 Sequel 中是否有类似于 ActiveRecord
命名范围的东西?另一个问题是,因为我的查询是 SELF JOIN
,我需要在 LEFT JOIN
上使用别名... Sequel 是否允许我按照我在查询中公开的方式使用别名?如果是,如何?
您只需在加入过程中为 table 添加别名:
class Publication < Sequel::Model
dataset_module do
def including_similar_publications
select{[publications[:id], publications[:body], similar_publication[:id].as(:similar_publication_id), similar_publication[:body].as(:similar_body)]}.
left_join(Sequel[:publications].as(:similar_publication), :id=>:publication_id)
end
end
end
我在一个出版物管理应用程序中工作。根据业务逻辑,如果一个出版物的文本具有等于或高于 75% 的相似度,则该出版物可以属于另一个出版物。因此,在数据库中,我在 publications
table.
到目前为止,我有以下完美运行的查询:
SELECT
publications.id, publications.body,
similar_publications.id similar_id, similar_publications.body similar_body
FROM publications
LEFT JOIN publications similar_publications
ON similar_publications.id = publications.publication_id
WHERE publications.id = <an-id-here>;
问题是我想 "convert" 这个查询到 Sequel 的 DSL,以便以这样的方式简单地调用我的模型:Publication.including_similar_publications.where('publications.id = ?', 1)
我知道我需要在我的模型中创建这个方法。我的疑问是:如何?在 Sequel 中是否有类似于 ActiveRecord
命名范围的东西?另一个问题是,因为我的查询是 SELF JOIN
,我需要在 LEFT JOIN
上使用别名... Sequel 是否允许我按照我在查询中公开的方式使用别名?如果是,如何?
您只需在加入过程中为 table 添加别名:
class Publication < Sequel::Model
dataset_module do
def including_similar_publications
select{[publications[:id], publications[:body], similar_publication[:id].as(:similar_publication_id), similar_publication[:body].as(:similar_body)]}.
left_join(Sequel[:publications].as(:similar_publication), :id=>:publication_id)
end
end
end