2016-12-28 2 views
0

Ich arbeite in einer Publikation Management-Anwendung. Nach der Geschäftslogik kann eine Publikation zu einer anderen Publikation gehören, wenn ihre Texte eine Ähnlichkeit von mindestens 75% aufweisen. Also habe ich in der Datenbank eine Selbstbeziehung auf der publications Tabelle erstellt.Ist es möglich, einen Self-Join in Sequel auszuführen?

Bisher habe ich die folgende Abfrage, die perfekt funktioniert:

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

Das Problem ist, dass ich diese Abfrage Sequel DSL, um zu „konvertieren“ wollen einfach in einer Art und Weise mein Modell zu nennen wie Also: Publication.including_similar_publications.where('publications.id = ?', 1)

Ich weiß, ich muss diese Methode in mein Modell erstellen. Mein Zweifel ist: Wie? Gibt es in Sequel ähnliche Ziele wie ActiveRecord? Ein anderes Problem ist, dass, weil meine Abfrage ein SELF JOIN ist, ich Aliasing auf LEFT JOIN verwenden muss ... Erlaubt Sequel, dass ich Aliases die Art verwende, die ich in meiner Abfrage ausstellte? Wenn ja, wie?

Antwort

1

Sie müssen nur die Tabelle an Alias ​​während der Join:

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 
Verwandte Themen