3

選択したビデオが含まれるランダムを選択するネストされたサブクエリAlbumIDがあり(ビデオは複数のアルバムに含まれる可能性があります)、外部クエリはそれに基づいてビデオとアルバム情報を返しますAlbumID

問題は、クエリが混合結果を返すことです。1つのアルバムのビデオをいくつか提供する場合もあれば、複数のアルバムのビデオを提供する場合もありますが、何も返さない場合もあります。

サブクエリの代わりに特定のクエリを指定すると、外部クエリが機能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
                                    )
4

1 に答える 1

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
于 2012-11-13T16:54:14.783 に答える