从嵌套的位置选择使用knex和mysql的位置

时间:2019-07-19 17:20:57

标签: javascript mysql express knex.js

我与两个表有一对多的关系。我需要使用knex来执行查询,在该查询中我只有一块表中的一条数据。查询将使用该数据段在相似的行上查找外键,以从外表中获取数据。为此,我使用标准的mysql查询:

this

列表ID属于卖家,在评论中不存在。我可以使用列表ID在同一行中找到一个SellerID,该ID在评论中具有外键。这样,我便可以使用该列表ID从评论中获得所需的信息。我想使用knex执行相同的查询,但是不知道如何处理嵌套的Promise。

这是我所拥有的:

SELECT 
      sellers_ID,
      sellerName,
      sellerUsername,
      sellerAvatar,
      listingID,
      productTitle,
      productImage,
      averageRating,
      reviewerName,
      reviewerAvatar,
      reviewDate,
      reviewRating,
      reviewText
    FROM
      sellers,
      reviews
    WHERE
      reviews.sellers_ID = (SELECT sellerID FROM sellers WHERE listingID = ${id})
    AND 
      sellerID = (SELECT sellerID FROM sellers WHERE listingID = ${id})

我已经尝试过在哪里添加嵌套的选择查询,但是它不起作用。我收到此错误:

const promise4all = Promise.all(
    [
    knex.select('sellerID').from('sellers').where({ listingID : id })
    ]
  )

  knex.select(
      'sellers_ID',
      'sellerName',
      'sellerUsername',
      'sellerAvatar',
      'listingID',
      'productTitle',
      'productImage',
      'averageRating',
      'reviewerName',
      'reviewerAvatar',
      'reviewDate',
      'reviewRating',
      'reviewText'
    ).from(
      'sellers',
      'reviews'
    )
    .where({
      'reviews.sellers_ID': knex.select('sellerID').from('sellers').where({ listingID : id }),
      'sellerID'          : knex.select('sellerID').from('sellers').where({ listingID : id })
    })
    .then( result => {
      console.log('knex query result: ', result);
    })
    .catch( error => {
      console.log('knex error: ', error)
    })

0 个答案:

没有答案