我与两个表有一对多的关系。我需要使用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)
})