MySQL查询使用RAND()子查询条件

时间:2012-11-13 15:22:23

标签: mysql subquery

我有一个嵌套的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
                                    )

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