2016-12-28 48 views
0

我正在從事出版物管理應用程序。根據業務邏輯,如果出版物的文本具有等於或高於75%的相似度,則出版物可以屬於另一出版物。因此,在數據庫中,我在publications表上創建了一個自我關係。是否有可能在Sequel中執行自我加入?

到目前爲止,我有以下查詢完美的作品:

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

的問題是,我想「轉換」這個查詢到續集的DSL,以簡單地叫我的模型在某種程度上像所以:Publication.including_similar_publications.where('publications.id = ?', 1)

我知道我需要在我的模型中創建這個方法。我的疑問是:如何?在續集中是否有類似ActiveRecord的命名示波器?另一個問題是,因爲我的查詢是SELF JOIN,我需要在LEFT JOIN上使用別名... Sequel是否允許我以我在查詢中公開的方式使用別名?如果是,如何?

回答

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 
相關問題