小编典典

LEFT JOIN 仅第一行

all

我阅读了很多关于只获取左连接的第一行的帖子,但是,由于某种原因,这对我不起作用。

这是我的结构(当然是简化的)

饲料

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'

阅读 104

收藏
2022-08-03

共1个答案

小编典典

@Matt Dodges 的回答让我走上了正轨。再次感谢所有答案,同时帮助了很多人。让它像这样工作:

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'
2022-08-03