【问题标题】:MYSQL Only limit results from left table, but show all results from right tableMYSQL 只限制左表的结果,但显示右表的所有结果
【发布时间】:2021-10-02 22:29:51
【问题描述】:

我正在建立一个数据库,用于存储名为“新闻”的网站的帖子。每个新闻帖子都可以存储一些 (0-255) 媒体。我可以像这样获取所有数据:

SELECT * 
FROM news 
LEFT JOIN media ON news.id = news_id

返回:

news.id title created media.id news_id filename
1 Title1 ... NULL NULL NULL
2 Title2 ... NULL NULL NULL
3 Title3 ... NULL NULL NULL
4 Title4 ... NULL NULL NULL
5 Title5 ... 1 5 media1.png
5 Title5 ... 2 5 media2.png

请注意,news.id = 5 出现了两次,因为它有两张与之关联的图像。

我的目标是获得最新的 3 篇这样的帖子

SELECT * 
FROM news 
LEFT JOIN media ON news.id = news_id 
ORDER BY created DESC 
LIMIT 3

返回:

news.id title created media.id news_id filename
5 Title5 ... 2 5 media2.png
5 Title5 ... 1 5 media1.png
4 Title4 ... NULL NULL NULL

但是我希望它返回所有 ID 为 5、4 和 3 的帖子以及它们的所有媒体,如下所示:

news.id title created media.id news_id filename
5 Title5 ... 2 5 media2.png
5 Title5 ... 1 5 media1.png
4 Title4 ... NULL NULL NULL
3 Title3 ... NULL NULL NULL

MySql 是否可以做到这一点,或者是否有其他数据库组织可以做到这一点?基本上我只想限制 LEFT 表的结果,让“重复”出现,这样我仍然可以获得所有 RIGHT 表数据。我正在使用 PHP 准备好的语句来进行这些 MYSQL 查询,所以我可能无法使用子查询,但我不确定。

【问题讨论】:

  • 如果您选择这样做,准备好的语句不会限制您使用子查询的能力

标签: php mysql left-join


【解决方案1】:

从获取最后 3 个帖子的子查询中选择,而不是从整个表中选择。

SELECT *
FROM (
    SELECT *
    FROM news
    ORDER BY created DESC
    LIMIT 3
) AS news
LEFT JOIN media ON news.id = news_id 

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2014-09-02
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多