MYSQL LEFT JOIN 将所有数据返回为 NULL

Posted

技术标签:

【中文标题】MYSQL LEFT JOIN 将所有数据返回为 NULL【英文标题】:MYSQL LEFT JOIN returning all data as NULL 【发布时间】:2021-02-09 04:56:25 【问题描述】:

我的mysql版本是5.7.32。

我意识到这个问题已经被问过很多次了,而且我已经尝试了很多帖子的答案,但都没有成功。提前谢谢你。

这是我目前的查询,它从 LEFT JOIN 中返回所有内容为 NULL。

        SELECT %playlists%.*, tracks.*
        FROM %playlists%
        LEFT JOIN (
            SELECT *
            FROM %tracks%
            ORDER BY timestamp DESC
            LIMIT 1
        ) AS tracks ON tracks.id_playlist=%playlists%.id
        WHERE %playlists%.owner='.$id_owner.'
        ORDER BY %playlists%.name ASC

我的桌子是前的

%playlist%
name           |id |owner|
relaxing music | 1 | 3   |

%tracks%
id_playlist|timestamp |tracks|
   1       |1234958574| 200
   1       |1293646887| 300

我想包含来自 %tracks% 的最新时间戳

【问题讨论】:

【参考方案1】:

我想包含来自 %tracks% 的最新时间戳

在 MySQL 5.7 中,我建议使用相关子查询过滤 left join,从而为当前播放列表带来最新的 timestamp

select p.*, t.timestamp, t.tracks
from playlists p
left join tracks t 
    on  t.id_playlist = p.id
    and t.timestamp = (select max(t1.timestamp) from tracks t1 where t1.id_playlist = p.id)
where p.owner = ?
order by p.name

请注意,我删除了表名周围的百分号(这不是有效的 SQL),并且我使用了表别名(pt),这使得查询更易于编写和阅读。我还使用了占位符(?)来表示查询参数;在查询字符串中连接变量是不好的做法,应该首选准备好的语句。

【讨论】:

谢谢,它成功了。我不知道我可以使用这样的快捷方式。非常感谢! :)

以上是关于MYSQL LEFT JOIN 将所有数据返回为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MySQL LEFT JOIN 不返回所有行,除非有 WHERE 子句 - phpMyAdmin 问题

mysql left join,right join,inner join的区别

MySQL 数据库中 left outer join 和 left join 啥区别?

Mysql之inner join,left join,right join详解

mysql之left joinright joininner join的区别

Mysql LEFT JOIN with count 返回未知列