嗨,Knexjs团队的出色工作。 我正在通过一个具有多对多关系的小示例尝试通过ORM进行knexjs。 该示例是作者和书籍的示例,其中auhtors表和book表通过author_books表具有多对多关系。 我想和所有作者一起读一本特别的书。 以下是提供预期结果的原始查询。 但是我没有得到如何使用Knexjs构建此查询的方法吗? 任何帮助,将不胜感激。
注意:我正在将Knexjs与javascript ES6一起使用。
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
这是我尝试使用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)
请让我知道我是否在某处错了?
问题是如何使用knexjs嵌套联接查询? 使用knex将内部联接嵌套到Left或Right JOIN中,以便knex可以构建SQL查询,如上面的Query:部分所示?
@saurabhghewari您是否找到这个问题的解决方案? 我正在尝试做类似的事情。
我不得不说我不确定knex是否完全支持嵌套连接...在这种情况下我没有看到任何测试或文档,因此我很确定它们不受支持。 请为此添加功能请求。
最有用的评论
问题是如何使用knexjs嵌套联接查询? 使用knex将内部联接嵌套到Left或Right JOIN中,以便knex可以构建SQL查询,如上面的Query:部分所示?