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

Luk*_*een 3 mysql 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
                                    )
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 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
Run Code Online (Sandbox Code Playgroud)