Ответы пользователя по тегу Базы данных
  • Подзапрос в условии ON для LEFT JOIN'а в MySQL

    Sorbing
    @Sorbing Автор вопроса
    В итоге, я добавил суррогатный PK, вместо 3-х составных полей. Если не учитывать денормализацию БД, считаю это оптимальным решением. Итоговый запрос:
    SELECT U.*, S.*
    FROM `user` AS U
    LEFT JOIN stats AS S 
      ON S.id = (
        SELECT id
        FROM stats AS S2 
        WHERE S2.user_id = U.id
        ORDER BY id DESC
        LIMIT 1
      )
    

    Я получаю необходиммые мне данные — все поля последней записи таблицы stats с любым типом (можно указать конкретный тип) для каждого юзера. При этом сортировка по ID будет быстрее, чем по дате. Запись для JOIN'а теперь однозначная, ситуация выборкой нескольких записей статсы с одинаковой датой решена.
    Осталось прогнать на более-менее реальном наборе данных и оценить производительность.
    Всем спасибо за помощь.
    Ответ написан
    Комментировать