sql >> Database teknologi >  >> RDS >> Mysql

Hvordan vælger jeg tilfældigt unikke par af rækker fra en tabel?

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 returnerer kun et par, hvis du "trækker lod" et ad gangen. Ellers skal du op på grænsen til hvor mange par du har brug for.

Ovenstående forespørgsel forudsætter, at du kan få

1 - 2
2 - 7

og at parringen 2 - 7 er gyldig, da den ikke eksisterer, selvom 2 vises igen. Hvis du kun vil have en person med i only one par nogensinde, så

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;

Hvis multiple pairs skal genereres i én enkelt forespørgsel, OG destinationstabellen er stadig tom, du kan bruge denne enkelt forespørgsel. Bemærk, at LIMIT 6 returnerer kun 3 par.

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. PostgreSQL sletning med indre joinforbindelse

  2. Hvordan kalder man oracle-lagret procedure, som inkluderer brugerdefineret type i java?

  3. WordPress adgang

  4. MySQL, opdater flere tabeller med en forespørgsel