MYSQL LEFT JOIN 将所有数据返回为 NULL
MYSQL LEFT JOIN returning all data as NULL
我的mysql版本是5.7.32。
我知道这个问题已经被问过很多次了,我已经尝试了很多次 post 的回答,但都没有成功。提前谢谢你。
这是我目前的查询,returns 全部来自 LEFT JOIN as 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%
的最新时间戳
I want to include the latest timestamp from %tracks%
在 MySQL 5.7 中,我建议使用为当前播放列表带来最新 timestamp
的相关子查询过滤 left join
:
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
请注意,我删除了 table 名称周围的百分号(无效 SQL),并且我使用了 table 别名(p
和 t
),这使得查询更容易编写和阅读。我还使用了一个占位符(?
)来表示查询参数;在查询字符串中连接变量是不好的做法,应该首选准备好的语句。
我的mysql版本是5.7.32。
我知道这个问题已经被问过很多次了,我已经尝试了很多次 post 的回答,但都没有成功。提前谢谢你。
这是我目前的查询,returns 全部来自 LEFT JOIN as 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%
的最新时间戳I want to include the latest timestamp from %tracks%
在 MySQL 5.7 中,我建议使用为当前播放列表带来最新 timestamp
的相关子查询过滤 left join
:
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
请注意,我删除了 table 名称周围的百分号(无效 SQL),并且我使用了 table 别名(p
和 t
),这使得查询更容易编写和阅读。我还使用了一个占位符(?
)来表示查询参数;在查询字符串中连接变量是不好的做法,应该首选准备好的语句。