Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để chọn các cặp hàng duy nhất từ ​​một bảng một cách ngẫu nhiên?

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 chỉ trả về một cặp nếu bạn đang "rút thăm" từng cặp một. Nếu không, hãy tăng giới hạn đến bao nhiêu cặp bạn cần.

Truy vấn trên giả định rằng bạn có thể nhận được

1 - 2
2 - 7

và ghép nối 2 - 7 là hợp lệ vì nó không tồn tại, ngay cả khi 2 được giới thiệu lại. Nếu bạn chỉ muốn một người làm nổi bật trong only one ghép nối bao giờ, sau đó

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;

Nếu multiple pairs sẽ được tạo trong một truy vấn duy nhất, bảng đích vẫn trống, bạn có thể sử dụng một truy vấn duy nhất này. Lưu ý rằng LIMIT 6 chỉ trả lại 3 cặp.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngày giờ sau một giờ sau khi chèn. Tiết kiệm ánh sáng ban ngày

  2. Lỗi mySQL 1040:Quá nhiều kết nối

  3. Bạn có thể sử dụng bí danh trong mệnh đề WHERE trong mysql không?

  4. Biểu tượng cảm xúc không được chèn vào nút cơ sở dữ liệu js mysql

  5. PDO + MySQL và mã hóa UTF-8 bị hỏng