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

Temukan semua node dalam model daftar adjacency dengan oracle connect by

Akhirnya saya menemukan solusi yang mirip seperti ini:

  SELECT child FROM child_parent START WITH parent =
   (
    SELECT DISTINCT parent FROM   
     (
      SELECT parent
      FROM child_parent
      WHERE CONNECT_BY_ISLEAF = 1
        START WITH child = 5
        CONNECT BY PRIOR parent = child
      UNION
      SELECT parent
      FROM child_parent
      WHERE parent = 5
     ) 
   )
   CONNECT BY NOCYCLE PRIOR child = parent
   UNION
   SELECT DISTINCT parent FROM   
   (
    SELECT parent
    FROM child_parent
    WHERE CONNECT_BY_ISLEAF = 1
      START WITH child = 5
      CONNECT BY PRIOR parent = child
    UNION
    SELECT parent
    FROM child_parent
    WHERE parent = 5
   );

Ini bekerja dengan semua node untuk contoh yang diberikan. Tetapi jika salah satu daun memiliki induk kedua dan titik awal berada di atas node ini atau di cabang yang berbeda, itu tidak berfungsi.

Tapi bagi saya itu sudah cukup.

Solusi untuk mendapatkan semua node dalam grafik dapat berupa:menerapkan kebalikan dari kueri di atas (dari atas ke bawah) dan kemudian menjalankannya (bawah ke atas, atas ke bawah) sebaliknya sampai Anda tidak menemukan lagi node baru. Ini akan membutuhkan PL/SQL dan saya juga tidak tahu tentang kinerjanya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jalankan kode sql dengan variabel di jendela kode Oracle SQL Developer

  2. Bagaimana cara mendapatkan hari pertama dan terakhir dalam seminggu di Oracle?

  3. NOT IN seleksi dengan nilai NULL

  4. Masukkan kueri di Oracle:Nama tabel tidak valid

  5. Perubahan pada konteks sesi database tetap ada dengan penggunaan kembali koneksi gabungan