Knex: ¿Es posible crear consultas de unión anidadas?

Creado en 21 abr. 2016  ·  3Comentarios  ·  Fuente: knex/knex

Hola, Gran trabajo del equipo de Knexjs. Estoy probando knexjs sobre ORM con un pequeño ejemplo que tiene una relación de muchos a muchos. El ejemplo es de autores y libros donde la tabla de autores y la tabla de libros tienen una relación de varios a muchos a través de la tabla de libros de autores. Quiero conseguir un libro en particular con todos los autores. A continuación se muestra una consulta sin procesar que da el resultado esperado. ¿Pero no entiendo cómo construir esta consulta usando Knexjs? Cualquier ayuda sería apreciada.

Nota: estoy usando Knexjs con javascript ES6.

Consulta:-

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

esta es la consulta que estoy tratando de construir usando Knexjs.

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)

Por favor, avíseme si me equivoco en alguna parte.

question

Comentario más útil

La pregunta es ¿cómo anidar consultas de combinación usando knexjs? Inner Join anidado con Left o Right JOIN usando knex, para que knex pueda construir una consulta SQL como se muestra arriba en la sección Consulta:?

Todos 3 comentarios

La pregunta es ¿cómo anidar consultas de combinación usando knexjs? Inner Join anidado con Left o Right JOIN usando knex, para que knex pueda construir una consulta SQL como se muestra arriba en la sección Consulta:?

@saurabhghewari , ¿alguna vez encontró una solución para esta pregunta? Estoy intentando hacer algo similar.

Debo decir que no estoy seguro de si knex admite uniones anidadas en absoluto ... No vi ninguna prueba o documentación para ese caso, así que estoy bastante seguro de que no son compatibles. Agregue una solicitud de función para esto.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

sandrocsimas picture sandrocsimas  ·  3Comentarios

lanceschi picture lanceschi  ·  3Comentarios

npow picture npow  ·  3Comentarios

fsebbah picture fsebbah  ·  3Comentarios

mishitpatel picture mishitpatel  ·  3Comentarios