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),并且我使用了表别名(p
和 t
),这使得查询更易于编写和阅读。我还使用了占位符(?
)来表示查询参数;在查询字符串中连接变量是不好的做法,应该首选准备好的语句。
【讨论】:
谢谢,它成功了。我不知道我可以使用这样的快捷方式。非常感谢! :)以上是关于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详解