Knex: Ist es möglich, eine verschachtelte Join-Abfrage zu erstellen?

Erstellt am 21. Apr. 2016  ·  3Kommentare  ·  Quelle: knex/knex

Hallo, großartige Arbeit von Knexjs Team. Ich probiere Knexjs über ORM mit einem kleinen Beispiel aus, das viele zu viele Beziehungen hat. Das Beispiel zeigt Autoren und Bücher, bei denen die Auhtortabelle und die Buchtabelle über die Tabelle author_books viele zu viele Beziehungen haben. Ich möchte mit allen Autoren ein bestimmtes Buch bekommen. Unten finden Sie eine Rohabfrage, die das erwartete Ergebnis liefert. Aber ich verstehe nicht, wie man diese Abfrage mit Knexjs erstellt? Jede Hilfe wäre dankbar.

Hinweis: Ich verwende Knexjs mit Javascript ES6.

Abfrage:-

SELECT  `book`.`id` ,  `book`.`title` ,  `authors`.`id` AS  `authors.id` ,  `authors`.`name`
AS  `authors.authorname` ,  `authors.author_books`.`book_id` 
AS  `authors.author_books.bookId` , `authors.author_books`.`author_id` 
AS  `authors.author_books.author_id` 
FROM  `books` AS  `book` 
LEFT OUTER JOIN (
 `author_books` AS  `authors.author_books` 
INNER JOIN  `authors` AS  `authors` ON  `authors`.`id` =  `authors.author_books`.`author_id`
) ON  `book`.`id` =  `authors.author_books`.`book_id` 
WHERE  `book`.`id` =1

Dies ist die Abfrage, die ich mit Knexjs erstellen möchte.

this.Knex('books as book')
.leftOuterJoin('author_books as authors.author_books', function(){
  // How could I nest INNER JOIN in LEFT OUTER JOIN

  this.on('book.id', 'authors.author_books.book_id')
}).select('book.id', 'book.title', 'authors.id as authors.id'
  , 'authors.name as authors.name', 'authors.author_books.book_id as authors.author_books.book_id'
  , 'authors.author_books.author_id as authors.auhtor_books.author_id')
.where('book.id', id)

Bitte lassen Sie mich wissen, wenn ich irgendwo falsch liege.

question

Hilfreichster Kommentar

Die Frage ist, wie Join-Abfragen mit knexjs verschachtelt werden können. Inner Join verschachtelt mit Left oder Right JOIN mithilfe von knex, sodass knex eine SQL-Abfrage erstellen kann, wie oben im Abschnitt Abfrage: gezeigt?

Alle 3 Kommentare

Die Frage ist, wie Join-Abfragen mit knexjs verschachtelt werden können. Inner Join verschachtelt mit Left oder Right JOIN mithilfe von knex, sodass knex eine SQL-Abfrage erstellen kann, wie oben im Abschnitt Abfrage: gezeigt?

@saurabhghewari hast du jemals eine Lösung für diese Frage gefunden? Ich versuche etwas Ähnliches zu tun.

Ich muss sagen, dass ich nicht sicher bin, ob knex überhaupt verschachtelte Joins unterstützt ... Ich habe keine Tests oder Dokumentationen für diesen Fall gesehen, daher bin ich mir ziemlich sicher, dass sie nicht unterstützt werden. Bitte fügen Sie dazu eine Funktionsanfrage hinzu.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen