是否有可能在续集中执行自我加入?

时间:2016-12-28 13:50:37

标签: sql ruby self-join sequel

我在出版物管理应用程序中工作。根据业务逻辑,如果出版物的文本具有等于或高于75%的相似性水平,则该出版物可属于另一出版物。因此,在数据库中,我在publications表上创建了一个自我关系。

到目前为止,我有以下完美的查询:

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>;

问题是我想&#34;转换&#34;这个查询Sequel的DSL,只是为了简单地调用我的模型:Publication.including_similar_publications.where('publications.id = ?', 1)

我知道我需要在我的模型中创建这个方法。我怀疑是:如何?在续集中是否有与ActiveRecord命名范围类似的内容?另一个问题是因为我的查询是SELF JOIN,我需要在LEFT JOIN上使用别名... Sequel是否允许我按照我在查询中公开的方式使用别名?如果有,怎么样?

1 个答案:

答案 0 :(得分:1)

您只需在加入期间为表格添加别名:

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