取得LEFT JOIN 的第一行
在SQL 中,執行LEFT JOIN 通常會產生左表的多行,其中一個對於右表中的每個對應行。但是,在某些情況下,可能需要僅檢索左表的第一行。
簡化的數據庫結構
考慮以下簡化的數據庫結構:
動態
id | title | content ---------------------- 1 | Feed 1 | ...
藝術家
artist_id | artist_name ----------------------- 1 | Artist 1 2 | Artist 2
feeds_artists
rel_id | artist_id | feed_id ---------------------------- 1 | 1 | 1 2 | 2 | 1 ...feeds_artists
初步嘗試及其局限性
提取文章並僅包含每個feed 的第一位藝術家,通常使用LEFT JOIN。以下查詢表示初步嘗試: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'此查詢旨在僅檢索每個 feed ID 的 feeds_artists 表的第一行。但是,它無法有效地工作。
解決方案
要成功提取每個提要的第一位藝術家,可以使用以下查詢:SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT artist_id FROM feeds_artists fa WHERE fa.feed_id = f.id LIMIT 1 )在此修訂後的查詢中,子查詢確保藝術家值代表每個Feed ID 的feeds_artists 表中的第一行。 LIMIT 1 子句在僅選擇第一行方面起著至關重要的作用。
遞增ID 的替代解決方案
如果可以假設藝術家ID 隨著時間的推移而遞增,提出了另一種解決方案: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.feed_id )這裡,MIN(artist_id) 子查詢傳回具有最低值的藝術家ID,假設這對應於最早的藝術家。
以上是如何從每個左表條目的 LEFT JOIN 中僅檢索第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!