Извлечение только первой строки в LEFT JOIN
В SQL выполнение операции LEFT JOIN может привести к получению нескольких строк из правой таблицы сопоставляется с одной строкой из левой таблицы. В некоторых сценариях желательно получить только первую строку из правой таблицы для каждой строки левой таблицы.
Рассмотрим следующую упрощенную структуру данных:
**Feeds** id | title | content ---------------------- 1 | Feed 1 | ... **Artists** artist_id | artist_name ----------------------- 1 | Artist 1 2 | Artist 2 **feeds_artists** rel_id | artist_id | feed_id ---------------------------- 1 | 1 | 1 2 | 2 | 1
Чтобы получить статьи канала и связать с каждым каналом только первого исполнителя, можно использовать следующий синтаксис:
SELECT * FROM feeds LEFT JOIN feeds_artists ON wp_feeds.id = ( SELECT feeds_artists.feed_id FROM feeds_artists WHERE feeds_artists.feed_id = feeds.id LIMIT 1 ) WHERE feeds.id = '13815'
Однако этот подход может не дать желаемых результатов. Для достижения цели рассмотрите следующую альтернативу:
SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT MIN(fa.artist_id) a_id FROM feeds_artists fa WHERE fa.feed_id = f.id )
Эта модификация использует функцию MIN() для определения исполнителя с наименьшим идентификатором, предполагая, что идентификаторы исполнителей увеличиваются с течением времени. В результате LEFT JOIN будет извлекать только первого исполнителя, связанного с каждым каналом.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3