Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oznacz osoby, które mają wspólne funkcje z Oracle SQL

Oto jeden ze sposobów, aby to zrobić, używając zapytania hierarchicznego („połącz przez”). Pierwszym krokiem jest wyodrębnienie początkowych relacji z danych bazowych; kwerenda hierarchiczna jest zbudowana na wyniku tego pierwszego kroku. Do danych wejściowych dodałem jeszcze jeden wiersz, aby zilustrować węzeł, który sam w sobie jest połączonym komponentem.

Oznaczyłeś połączone komponenty jako A i B - oczywiście to nie zadziała, jeśli masz, powiedzmy, 30 000 połączonych komponentów. W moim rozwiązaniu używam minimalnej nazwy węzła jako znacznika dla każdego połączonego 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
;

Wyjście:

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

Następnie, jeśli potrzebujesz dodać ID_GROUP jako FLAGę do danych bazowych, możesz to zrobić za pomocą trywialnego złączenia.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kod sql do tworzenia lustrzanego obrazu ciągu w Oracle sql

  2. Jak efektywnie parsować json w Oracle 18c?

  3. Wymiana ciągu Oracle

  4. Problemy z grupowaniem

  5. Błąd IO:Karta sieciowa nie mogła nawiązać połączenia - z Oracle 11gR2. Łączenie z programistą SQL