mysql - LEFT JOIN 仅第一行

bluestorm 阅读:4 2023-05-25 15:08:15 评论:0

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

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

供稿

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 


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们