Mysql
 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 - 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 एक ही क्वेरी में जेनरेट किया जाना है, और गंतव्य तालिका अभी भी खाली है, आप इस एकल क्वेरी का उपयोग कर सकते हैं। ध्यान दें कि 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल क्लॉज ग्रुप बाय 1 का क्या मतलब है?

  2. Mysql द्वारा आदेश हटाएं

  3. Sequelize मॉडल से Sequelize CLI के साथ स्वतः माइग्रेशन कैसे उत्पन्न करें?

  4. केवल एक mysql क्वेरी में पहली पंक्ति को हथियाना

  5. पीडीओ सीधे डेटाबेस में छवि डालें - हमेशा बीएलओबी डालें - 0 बी