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
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 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;

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

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

Войти через центр авторизации
Похожие вопросы