ฉันอ่านกระทู้มากมายเกี่ยวกับการรับเฉพาะแถวแรกของการเข้าร่วมด้านซ้าย แต่ด้วยเหตุผลบางประการสิ่งนี้ไม่ได้ผลสำหรับฉัน
นี่คือโครงสร้างของฉัน (ทำให้ง่ายขึ้นแน่นอน)
ฟีด
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
...
ตอนนี้ฉันต้องการรับบทความและเข้าร่วมเฉพาะศิลปินคนแรกเท่านั้นและฉันก็คิดถึงสิ่งนี้:
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'
เพียงเพื่อรับเฉพาะแถวแรกของ feeds_artists แต่ยังไม่ได้ผล
ฉันไม่สามารถใช้TOP
เนื่องจากฐานข้อมูลของฉันและฉันไม่สามารถจัดกลุ่มผลลัพธ์ตามfeeds_artists.artist_id
ที่ฉันต้องการจัดเรียงตามวันที่ (ฉันได้ผลลัพธ์จากการจัดกลุ่มด้วยวิธีนี้ แต่ผลลัพธ์ที่ไม่ใหม่ที่สุด)
พยายามบางอย่างกับ OUTER APPLY เช่นกัน - ไม่ประสบความสำเร็จเช่นกัน พูดตามตรงฉันนึกไม่ออกจริงๆว่าเกิดอะไรขึ้นในแถวเหล่านั้น - อาจเป็นเหตุผลใหญ่ที่สุดว่าทำไมฉันถึงไม่สามารถใช้งานได้
วิธีการแก้:
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
)
WHERE f.id = '13815'