我有以下查询:
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。但是,对于很多记录,我需要选择最新添加的一个(金额)
我相信我可能需要一个子查询,但是我无法实现它。
答案 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)