在JOIN语句中仅选择最后一条记录

时间:2019-04-11 12:53:52

标签: mysql

我有以下查询:

    SELECT 
      usp.user_id AS userId,
      usp.create_time AS create_time,
      ml.amount AS amount      
    FROM user_subscription_plan AS usp
            RIGHT JOIN product AS product ON product.id = usp.product_id            
            LEFT JOIN modification_log AS ml ON ml.subscription_id = usp.id         
    WHERE usp.id IN ('447482')

我有三个表,需要从中选择数据。

我的问题始于上一次的LEFT加入。

modification_log表可以没有条目,但也可以有更多条目。 我只选择最新条目。通过上面的查询,如果我在Modify_log中有2个(或更多)条目,我将收到2个相同的结果(重复)。

我想要得到的:

如果modification_log中没有结果,则它将返回null。我认为这涵盖了LEFT JOIN。但是,对于很多记录,我需要选择最新添加的一个(金额)

我相信我可能需要一个子查询,但是我无法实现它。

2 个答案:

答案 0 :(得分:1)

您必须使用子查询来将与modification_log表的左连接作为

SELECT 
  usp.user_id AS userId,
  usp.create_time AS create_time,
  ml.amount AS amount      
FROM user_subscription_plan AS usp
  RIGHT JOIN product AS product ON product.id = usp.product_id            
  LEFT JOIN 
        (select * modification_log where subscription_id 
        IN ('447482') order by created_at desc LIMIT 1)
        AS ml ON ml.subscription_id = usp.id         
WHERE usp.id IN ('447482')

请注意,子查询select * modification_log where subscription_id IN ('447482')中的where子句 与最后一个条件相同

答案 1 :(得分:1)

只需在您的max之后添加一个left join条件,即可加入最新的条目,如下所示-

LEFT JOIN modification_log AS ml ON ml.subscription_id = usp.id
where usp.id IN ('447482') and ml.id = (select max(id) from modification_log)