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

MySQLテーブルからランダムな行を1つ選択する際の問題

    rand()のため、コードは複数の行を返しています 各行で評価されます。したがって、複数の一致の変更があります。そして、まったく一致しない可能性があります。

    あなたはあなたのアイデアを使うことができますが、このようにそれを試してください:

    select relusers.uname
    from relusers cross join
         (selext @rand := rand()) const
    where relusers.users_id = floor(@rand*46+1);
    

    これにより、ランダムな値が1つだけ生成されるため、1つの行だけが生成されます。ただし、46行しかないため、order by メソッドは十分に機能するはずです:

    select relusers.uname
    from relusers
    order by rand()
    limit 1;
    


    1. アイテムが別のテーブルに存在しないかどうかを確認する

    2. ANALYZE TABLE `myTable`を手動で実行しない限り、MySQLはinformation_schemaを更新しません

    3. SQLAlchemyと結合、外部キーはありません

    4. カーソルを使用せずに各行のSQL呼び出しストアドプロシージャ