sql >> Databáze >  >> RDS >> Oracle

Označte osoby, které sdílejí společné funkce s Oracle SQL

Zde je jeden způsob, jak toho dosáhnout, pomocí hierarchického dotazu („připojit pomocí“). Prvním krokem je extrahovat počáteční vztahy ze základních dat; hierarchický dotaz je postaven na výsledku z tohoto prvního kroku. Ke vstupům jsem přidal další řádek, abych ilustroval uzel, který je sám o sobě připojenou komponentou.

Zapojené komponenty jste označili jako A a B – to samozřejmě nepůjde, pokud máte řekněme 30 000 připojených komponent. V mém řešení používám minimální název uzlu jako značku pro každou připojenou komponentu.

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
;

Výstup:

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

Pak, pokud potřebujete přidat ID_GROUP jako FLAG k základním datům, můžete tak učinit pomocí triviálního spojení.




  1. Chyba při úpravě DAL, System.ArgumentException, Položka se stejným klíčem již existuje

  2. Převeďte text na číslo v dotazu MySQL

  3. Mysql desítkové:patro místo kulatého

  4. Vytvoření seznamu hodnot oddělených čárkami v příkazu Oracle SQL