是否可以在 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