У меня такой запрос:

    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')

У меня есть три таблицы, из которых мне нужно выбрать данные.

Моя проблема начинается с последнего левого соединения.

Таблица модификаций может не иметь записей, но также может иметь больше записей. Я хочу выбрать только последнюю запись. С помощью вышеупомянутого запроса, если у меня есть 2 (или более) записи в файле модификаций, я получаю 2 идентичных результата (повторяется).

Что бы я хотел получить:

Если в файлеification_log нет результатов, он возвращает ноль. Я думаю, что это покрыто левым соединением. Но также, в случае многих записей, мне нужно будет выбрать последний добавленный (сумма)

Я считаю, что мне может понадобиться подзапрос, но я не могу его реализовать.

2
Wexoni 11 Апр 2019 в 15:53

2 ответа

Лучший ответ

Вы должны использовать подзапрос для выполнения левого соединения с таблицей журнала изменений как

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')

Обратите внимание, что предложение where в подзапросе select * modification_log where subscription_id IN ('447482') такое же, как с последним условием

3
Jeffy Mathew 11 Апр 2019 в 14:05

Просто добавьте условие 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)
1
vivek_23 11 Апр 2019 в 13:25