我仍然在努力解决这个问题(我之前的文章是关于这个问题的,因为我更改了表参数,所以我遇到了另一个问题):
(有些列已经更改,所以这是一个不同的问题,因为我只有id as字段来获取最后一个insert)
餐桌产品:
id name
1 TV
2 RADIO
3 COMPUTER
表销售(产品标识是指产品的fk):
id_sales feedback product_id
4 GOOD 2
5 GOOD 3
6 NICE 3
我使用的查询:
SELECT products.name, sl.feed
FROM products LEFT JOIN (
SELECT product_id, max(id_sales), feedback AS feed FROM sales GROUP BY product_id) sl
ON products.id = sl.product_id
结果是:
name feed
TV NULL
RADIO GOOD
COMPUTER GOOD
它适用于电视和广播,但在专栏电脑,我必须显示最后的反馈,你可以看到它的'好',而不是'好'!不知何故,使用sql函数max(id\u sales)并不是我想象中的解决方案。我错过了什么?
3条答案
按热度按时间ippsafx71#
使用子查询和左联接
eivnm1vs2#
最好的方法是
row_number()
,但这可能不可用。因此,您可以筛选ON
条款:有其他方法来表达这种逻辑。这种方法的一大优点是可以最大限度地利用索引来提高性能。
ldioqlga3#
SELECT products.name, sl.feed FROM products LEFT JOIN ( SELECT product_id, rank() over (partition by product_id Order by id_Sales desc) pRank, feedback AS feed FROM sales ) sl ON products.id = sl.product_id where sl.pRank = 1
这对你有用吗?