sql >> Database >  >> RDS >> Oracle

Markeer personen die gemeenschappelijke functies delen met Oracle SQL

Hier is een manier om dit te doen, met behulp van een hiërarchische ("verbinden door") query. De eerste stap is om de initiële relaties uit de basisgegevens te extraheren; de hiërarchische query is gebaseerd op het resultaat van deze eerste stap. Ik heb nog een rij aan de invoer toegevoegd om een ​​knooppunt te illustreren dat op zichzelf een verbonden component is.

Je hebt de aangesloten componenten gemarkeerd als A en B - dat werkt natuurlijk niet als je bijvoorbeeld 30.000 aangesloten componenten hebt. In mijn oplossing gebruik ik de minimale knooppuntnaam als de markering voor elk aangesloten onderdeel.

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
;

Uitgang:

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

Als u vervolgens de ID_GROUP als een FLAG aan de basisgegevens moet toevoegen, kunt u dit doen met een triviale join.




  1. Hoe NCLOB, CLOB-gegevenswaarden uit de Oracle-database te lezen met behulp van klassieke ASP-pagina's?

  2. Hoe de LEFT()-functie werkt in MySQL

  3. Node-mysql query invoegen met twee waarden?

  4. Stapsgewijze procedure om gegevens van Excel naar MySql-databasetabel te migreren