我有一个嵌套的subquery,用于选择所选视频所在的随机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
)
答案 0 :(得分:5)
试试这个。将子查询移动到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