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

Temukan simpul anak terbanyak dari orang tua (tingkat apa pun) di Oracle

Dengan "kebanyakan simpul anak" yang saya maksud adalah simpul daun dari pohon. Anda dapat menentukan simpul daun dengan CONNECT_BY_ISLEAF kolom semu dari hierarki (CONNECT BY ) kueri.

Mengingat data sampel Anda dalam tabel, kueri berikut menghasilkan hasil yang diinginkan:

select connect_by_root id id
     , parent_did
  from table1
 where connect_by_isleaf = 1
connect by id = prior parent_did
  start with id in ('a','b','c');

| ID | PARENT_DID |
|----|------------|
|  a |          f |
|  a |          g |
|  a |          h |
|  b |          f |
|  b |          g |
|  b |          h |
|  c |          f |

SQL Fiddle

Mempertimbangkan data dan persyaratan Anda yang diperbarui termasuk fakta bahwa tabel kedua memiliki a, b, dan c sebagai kondisi awal:

select connect_by_root parent_id parent_id
     , id
  from table1
 where connect_by_isleaf = 1
connect by prior id = parent_id
  start with parent_id in (select id from table2)

| PARENT_ID | ID |
|-----------|----|
|         a |  f |
|         a |  g |
|         a |  h |
|         b |  f |
|         b |  g |
|         b |  h |
|         c |  f |

SQL Fiddle Anda dapat mempelajari lebih lanjut tentang kueri hierarkis dari dokumentasi .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengoptimalkan Oracle CONNECT BY saat digunakan dengan klausa WHERE

  2. Gabung luar kiri di mana tabel berasal dari dua sistem basis data yang berbeda

  3. Bagaimana mengatasi ORA-29283 :operasi file tidak valid

  4. Menghubungkan Excel VBA ke Oracle DB menggunakan 'ODBC'

  5. menghubungkan oracle dari r