Задать вопрос
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer

Каким образом лучше всего осуществить джоин одной единственной строчки из множества?

Добрый день, господа.

Существует запрос. Весь приводить не буду, только важные моменты.

SELECT * FROM tbl1 LEFT JOIN tbl2 USING(field1) WHERE tbl2.field2 > 0;


Проблема в том, что в таблице между tbl1 и tbl2 отношение один ко многим, а извлечь необходимо только одну строчку, у которой значение даты самое позднее.

Запрос вида ниже можно не предлагать, к сожалению, он сильно просаживает производительность в нашей ситуации. Если более производительных/лаконичных вариантов нет - напишите.
SELECT * FROM tbl1
LEFT JOIN tbl2 ON tbl2.pk = (SELECT pk FROM tbl2 WHERE tbl2.field1 = tbl1.field1 ORDER BY ... LIMIT 1)
WHERE tbl2.field2 > 0
  • Вопрос задан
  • 234 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Специалист по кибербезопасности 2.0/ Этичный хакер
    12 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
bitniks
@bitniks
Go/PHP/Symfony developer
Давал ответ на подобный вопрос здесь

Решение было такое:
SELECT *
FROM main m
LEFT JOIN extra e1 ON m.id = e1.main_id
LEFT JOIN extra e2 ON e1.main_id = e2.main_id AND e2.date > e1.date
WHERE e2.date IS NULL AND e1.status = 1;

Думаю, суть ясна
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
еКапуста Новосибирск
от 250 000 до 450 000 ₽
Невасофт Санкт-Петербург
от 200 000 ₽
Невасофт Санкт-Петербург
от 300 000 ₽