我有一个嵌套的子查询,用于选择AlbumID所选视频所在的随机数(视频可以在多个专辑中),然后外部查询会根据该查询返回视频和专辑信息AlbumID.
问题是查询返回混合结果; 有时它会从一张专辑中提供一些视频,有时它会提供来自多个专辑的视频,有时它不返回任何内容.
如果我指定特定AlbumID而不是子查询,则外部查询有效,并且子查询本身正确地返回1随机AlbumID.但放在一起,它给我的结果好坏参半.我错过了什么?为什么它会返回不同数量的行和多个专辑?
我已经用测试数据复制了这个问题,你可以在CREATE这里找到查询:http://pastebin.com/raw.php?i = e6HaaSGK
SELECT SQL:
SELECT
Videos_Demo.VideoID,
VideosInAlbums_Demo.AlbumID
FROM
VideosInAlbums_Demo
LEFT JOIN
Videos_Demo
ON Videos_Demo.VideoID = VideosInAlbums_Demo.VideoID
WHERE
VideosInAlbums_Demo.AlbumID = (
SELECT
AlbumID
FROM
VideosInAlbums_Demo
WHERE
VideoID = '1'
ORDER BY
RAND()
LIMIT 1
)
Run Code Online (Sandbox Code Playgroud)
试试这个.将子查询移动到JOIN似乎可以解决问题.我认为问题与在WHERE子句中使用子查询有关.我认为在WHERE子句中,正在为每条记录执行子查询和RAND函数.这可能是结果变化的原因.
SELECT a.AlbumID,
Videos_Demo.VideoID,
VideosInAlbums_Demo.AlbumID
FROM VideosInAlbums_Demo
LEFT JOIN Videos_Demo
ON Videos_Demo.VideoID = VideosInAlbums_Demo.VideoID
JOIN
(
SELECT AlbumID
FROM VideosInAlbums_Demo
WHERE VideoID = '1'
ORDER BY RAND()
LIMIT 1
) AS a ON VideosInAlbums_Demo.AlbumID = a.AlbumID
Run Code Online (Sandbox Code Playgroud)