sql >> データベース >  >> RDS >> Mysql

左結合単一ランダムレコードMySQL

    RAND()のため サブクエリは決定論的ではないため、Sponsorのすべての行に対して実行されます テーブルと毎回、現在の行のIDと一致するかどうかに関係なくランダムなIDを再調整します。したがって、ランダムIDに一致する行がない可能性があるだけではありません。複数の行が表示される可能性もあります。

    2つのスポンサーを持つサンプルデータの場合、サブクエリは次の値を返す場合があります。

    • (1、1)は最初の行(1 =1、2 =1)と一致します
    • (1、2)は両方の行に一致します(1 =1、2 =2)
    • (2、1)はどの行にも一致しません(1 =2、2 =1)
    • (2、2)は2番目の行(1 =2、2 =2)と一致します

    サブクエリが1回だけ実行されることを保証するために、SELECT句を使用できます。次に、結果を派生テーブルとしてSponsorと結合します テーブル:

    SELECT C.*, S.Name AS SponName 
    FROM (
        SELECT C.ID AS CompID, C.Name AS CompName, (
            SELECT ID FROM Sponsor WHERE Company = C.ID ORDER BY RAND() LIMIT 1
        ) as SponID
        FROM Company C
    ) C
    LEFT JOIN Sponsor S ON S.ID = C.SponID
    

    デモ: http://rextester.com/LSSJT25902




    1. OracleBIPublisherで数値を単語に変換する

    2. MySQL多対多選択

    3. 認証されていないユーザーはMYSQLでどういう意味ですか?

    4. OracleからCrystalReportへの呼び出し手順