这是架构
这是查询:
SELECT
title, pubYear, quantity
FROM
book
INNER JOIN
orderDetails ON ISBN = bookisbn
WHERE
avgRating = (SELECT MIN(avgRating)
FROM orderDetails)
我正在尝试获得评分最低的书,但这会返回所有书
答案 0 :(得分:0)
我认为您需要在下面的查询中进行查询,因为您的等级列在书本上,因此您可能需要在子查询中更改表名
SELECT title, pubYear, quantity
FROM book INNER JOIN orderDetails ON ISBN=bookisbn
WHERE avgRating=(SELECT min(avgRating)
FROM book )
答案 1 :(得分:0)
我想您可能想要:
SELECT b.title, b.pubYear
FROM book b
WHERE b.avgRating = (SELECT min(b2.avgRating)
FROM book b2
);
两件事。我删除了数量。我想您想对此进行总结,但您的问题未指定,并且每个订单的单独行似乎很奇怪。其次,我添加了表别名和限定的列名。那很重要。
您认为您的查询是:
SELECT b.title, b.pubYear, od.quantity
FROM book b INNER JOIN
orderDetails od
ON b.ISBN = od.bookisbn
WHERE b.avgRating = (SELECT MIN(od2.avgRating)
FROM orderDetails od2
)
但是avgRating
中没有orderDetails
列,因此WHERE
子句实际上是:
WHERE b.avgRating = (SELECT MIN(b.avgRating)
FROM orderDetails od2
)
好吧,您正在将一列与其外部引用进行比较-难怪它总是正确的。
故事的寓意:始终限定表名,最好使用有意义的表别名,这些别名是表名的缩写。