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

テーブルから行の一意のペアをランダムに選択するにはどうすればよいですか?

    select a.id, b.id
    from people1 a
    inner join people1 b on a.id < b.id
    where not exists (
        select *
        from pairs1 c
        where c.person_a_id = a.id
          and c.person_b_id = b.id)
    order by a.id * rand()
    limit 1;
    

    Limit 1 一度に1つずつ「抽選」を行う場合は、1つのペアのみを返します。それ以外の場合は、必要なペア数まで制限を引き上げます。

    上記のクエリは、取得できることを前提としています

    1 - 2
    2 - 7
    

    ペアリング2 - 7 2が再びフィーチャーされても、存在しないため有効です。人をonly oneで紹介したい場合 ペアリングしてから

    select a.id, b.id
    from people1 a
    inner join people1 b on a.id < b.id
    where not exists (
        select *
        from pairs1 c
        where c.person_a_id in (a.id, b.id))
      and not exists (
        select *
        from pairs1 c
        where c.person_b_id in (a.id, b.id))
    order by a.id * rand()
    limit 1;
    

    multiple pairsの場合 ANDという1つのクエリで生成されます 宛先テーブルはまだ空なので、この単一のクエリを使用できます。 LIMIT 6に注意してください 3ペアのみを返します。

    select min(a) a, min(b) b
    from
    (
        select
          case when mod(@p,2) = 1 then id end a,
          case when mod(@p,2) = 0 then id end b,
          @p:[email protected]+1 grp
        from (
            select id
            from (select @p:=1) p, people1
            order by rand()
            limit 6
        ) x
    ) y
    group by floor(grp/2)
    


    1. PHPでのMySQL*.sqlファイルの実行

    2. SQL Server 2016:関係を作成する

    3. 警告:mysqli_connect():(HY000 / 1045):ユーザー'username' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    4. 動的WHERE句を作成するにはどうすればよいですか?