取得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 ...
初步嘗試及其局限性
提取文章並僅包含每個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'
解決方案
要成功提取每個提要的第一位藝術家,可以使用以下查詢: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 )
遞增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 )
以上是如何從每個左表條目的 LEFT JOIN 中僅檢索第一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!