左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 ... 

现在我想获得文章,只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' 

只是为了得到feeds_artists的第一行,但已经不起作用了。

我不能使用TOP因为我的数据库,我不能按feeds_artists.artist_id分组的结果,因为我需要按datesorting(我得到的结果,通过这种方式分组,但结果不是最新的)

尝试了一些与外部应用 – 也没有成功。 说实话,我真的不能想象在这些行中发生了什么 – 可能是我无法得到这个工作的最大原因。

解:

 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' 

如果您可以假设艺术家ID随着时间增加,那么MIN(artist_id)将是最早的。

所以试试这样(未经testing…)

 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 ) a 

版本没有子select:

  SELECT f.title, f.content, MIN(a.artist_name) artist_name FROM feeds f LEFT JOIN feeds_artists fa ON fa.feed_id = f.id LEFT JOIN artists a ON fa.artist_id = a.artist_id GROUP BY f.id 

没有子select的版本只会join第一个作者:

 SELECT f.title, f.content, a.artist_name artist_name, min(a.id) as m FROM feeds f LEFT JOIN feeds_artists fa ON fa.feed_id = f.id LEFT JOIN artists a ON fa.artist_id = a.artist_id GROUP BY f.id HAVING a.id = m;