查询无法与LEFT JOIN(MySQL)一起正常使用

时间:2018-09-26 17:30:53

标签: mysql sql join

我仍然在为这个问题而苦苦挣扎(我以前的帖子就是关于这个问题的,并且由于我已经更改了表参数,所以我遇到了另一个问题):

(某些列已更改,因此是一个不同的问题/问题,因为我只有id作为字段来获取最后一个插入内容)

餐桌产品:

id  name
1   TV
2   RADIO
3   COMPUTER

表销售(product_id是指产品的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

它适用于电视和广播,但是在“计算机”列中,我必须显示LAST反馈,您可以看到它是“ NICE”,而不是“ GOOD”!以某种方式使用SQL函数MAX(id_sales)不是我认为的解决方案。 我在这里想念什么?

3 个答案:

答案 0 :(得分:1)

最好的方法是row_number(),但这可能不可用。因此,您可以在ON子句中过滤最近的日期:

SELECT p.name, sl.feed 
FROM products p LEFT JOIN
     sales s
     ON p.id = s.product_id AND
        s.id_sales = (SELECT MAX(s2.id_sales) FROM sales s2 WHERE s2.product_id = s.product_id);

还有其他表达这种逻辑的方法。这种方法的一大优势在于,它可以最大程度地利用索引来提高性能。

答案 1 :(得分:0)

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

这对您有用吗?

答案 2 :(得分:0)

使用子查询并左联接

material