Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tandai individu yang berbagi fitur umum dengan Oracle SQL

Berikut adalah salah satu cara untuk melakukannya, menggunakan kueri hierarkis ("terhubung dengan"). Langkah pertama adalah mengekstrak hubungan awal dari data dasar; kueri hierarkis dibangun berdasarkan hasil dari langkah pertama ini. Saya menambahkan satu baris lagi ke input untuk menggambarkan simpul yang merupakan komponen yang terhubung dengan sendirinya.

Anda menandai komponen yang terhubung sebagai A dan B - tentu saja, itu tidak akan berfungsi jika Anda memiliki, katakanlah, 30.000 komponen yang terhubung. Dalam solusi saya, saya menggunakan nama node minimum sebagai penanda untuk setiap komponen yang terhubung.

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
;

Keluaran:

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

Kemudian, jika Anda perlu menambahkan ID_GROUP sebagai BENDERA ke data dasar, Anda dapat melakukannya dengan bergabung sepele.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Regex101 vs Oracle Regex

  2. Bagaimana Anda menafsirkan rencana penjelasan kueri?

  3. pdo_oci_handle_factory:Kesalahan saat mencoba mengambil teks untuk kesalahan ORA-01804

  4. Bagaimana cara mendesain tabel yang akan menyimpan data yang sangat besar?

  5. Penggabungan dua tabel yang tidak sepele