我读了许多关于仅获得左联接的第一行的主题,但是由于某种原因,这对我不起作用。

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

供稿

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'

最佳答案

如果您可以假设艺术家ID随时间增加,那么MIN(artist_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
  ) a

09-27 00:40
查看更多