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