Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle SQL के साथ सामान्य सुविधाओं को साझा करने वाले व्यक्तियों को फ़्लैग करें

यहाँ ऐसा करने का एक तरीका है, एक पदानुक्रमित ("इससे कनेक्ट करें") क्वेरी का उपयोग करना। पहला कदम आधार डेटा से प्रारंभिक संबंधों को निकालना है; इस पहले चरण के परिणाम पर पदानुक्रमित क्वेरी बनाई गई है। मैंने एक नोड को चित्रित करने के लिए इनपुट में एक और पंक्ति जोड़ी जो अपने आप में एक कनेक्टेड घटक है।

आपने कनेक्टेड घटकों को ए और बी के रूप में चिह्नित किया है - निश्चित रूप से, यदि आपके पास 30,000 कनेक्टेड घटक हैं, तो यह काम नहीं करेगा। मेरे समाधान में, मैं प्रत्येक जुड़े हुए घटक के लिए मार्कर के रूप में न्यूनतम नोड नाम का उपयोग करता हूं।

with
  sample_data (id, feature) as (
    select 1,  1 from dual union all
    select 1,  2 from dual union all
    select 1,  3 from dual union all
    select 2,  3 from dual union all
    select 2,  4 from dual union all
    select 2,  6 from dual union all
    select 3,  5 from dual union all
    select 3, 10 from dual union all
    select 3, 12 from dual union all
    select 4, 12 from dual union all
    select 4, 18 from dual union all
    select 5, 10 from dual union all
    select 5, 30 from dual union all
    select 6, 40 from dual
  )
-- select * from sample_data; /*
, initial_rel(id_base, id_linked) as (
    select distinct s1.id, s2.id
      from sample_data s1 join sample_data s2
                          on s1.feature = s2.feature and s1.id <= s2.id
  )
-- select * from initial_rel; /*
select     id_linked as id, min(connect_by_root(id_base)) as id_group
from       initial_rel
start with id_base <= id_linked
connect by nocycle prior id_linked = id_base and id_base < id_linked
group by   id_linked
order by   id_group, id
;

आउटपुट:

     ID   ID_GROUP
------- ----------
      1          1
      2          1
      3          3
      4          3
      5          3
      6          6

फिर, यदि आपको आधार डेटा में ID_GROUP को FLAG के रूप में जोड़ने की आवश्यकता है, तो आप इसे एक मामूली जुड़ाव के साथ कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में LONG को varchar में बदलें

  2. पहचानकर्ता 'APEX_JSON.PARSE' को oracle 11.2.0 . में घोषित किया जाना चाहिए

  3. रनटाइम पर उपयोगकर्ता से इनपुट कैसे प्राप्त करें

  4. Oracle BLOB एक्सट्रैक्शन बहुत धीमा

  5. ORA-24408:अद्वितीय सर्वर समूह नाम उत्पन्न नहीं कर सका