CONNECT BY klausa - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

CONNECT BY klausa

Klausa CONNECT BY menentukan hubungan antara baris dalam hierarki. Anda dapat menggunakan CONNECT BY untuk memilih baris dalam urutan hierarkis dengan menggabungkan tabel ke dirinya sendiri dan memproses data hierarkis. Misalnya, Anda dapat menggunakannya untuk melakukan loop secara rekursif melalui bagan organisasi dan daftar data.

Proses kueri hierarkis dalam urutan sebagai berikut:

  1. Jika klausa FROM memiliki gabungan, itu diproses terlebih dahulu.

  2. Klausa CONNECT BY dievaluasi.

  3. Klausul WHERE dievaluasi.

Sintaks

[START WITH start_with_conditions] CONNECT BY connect_by_conditions
catatan

Meskipun START dan CONNECT bukan kata yang dicadangkan, gunakan pengidentifikasi yang dibatasi (tanda kutip ganda) atau AS jika Anda menggunakan START dan CONNECT sebagai alias tabel dalam kueri Anda untuk menghindari kegagalan saat runtime.

SELECT COUNT(*) FROM Employee "start" CONNECT BY PRIOR id = manager_id START WITH name = 'John'
SELECT COUNT(*) FROM Employee AS start CONNECT BY PRIOR id = manager_id START WITH name = 'John'

Parameter

start_with_conditions

Kondisi yang menentukan baris root dari hierarki

connect_by_conditions

Kondisi yang menentukan hubungan antara baris induk dan baris anak dari hierarki. Setidaknya satu kondisi harus memenuhi syarat dengan operator unary yang digunakan untuk merujuk ke baris induk.

PRIOR column = expression -- or expression > PRIOR column

Operator

Anda dapat menggunakan operator berikut dalam kueri CONNECT BY.

TINGKAT

Pseudocolumn yang mengembalikan tingkat baris saat ini dalam hierarki. Mengembalikan 1 untuk baris root, 2 untuk anak dari baris root, dan seterusnya.

SEBELUMNYA

Operator unary yang mengevaluasi ekspresi untuk baris induk dari baris saat ini dalam hierarki.

Contoh

Contoh berikut adalah kueri CONNECT BY yang mengembalikan jumlah karyawan yang melaporkan secara langsung atau tidak langsung ke John, tidak lebih dari 4 level.

SELECT id, name, manager_id FROM employee WHERE LEVEL < 4 START WITH name = 'John' CONNECT BY PRIOR id = manager_id;

Berikut ini adalah hasil dari query.

id name manager_id ------+----------+-------------- 101 John 100 102 Jorge 101 103 Kwaku 101 110 Liu 101 201 Sofía 102 106 Mateo 102 110 Nikki 103 104 Paulo 103 105 Richard 103 120 Saanvi 104 200 Shirley 104 205 Zhang 104

Definisi tabel untuk contoh ini:

CREATE TABLE employee ( id INT, name VARCHAR(20), manager_id INT );

Berikut ini adalah baris yang dimasukkan ke dalam tabel.

INSERT INTO employee(id, name, manager_id) VALUES (100, 'Carlos', null), (101, 'John', 100), (102, 'Jorge', 101), (103, 'Kwaku', 101), (110, 'Liu', 101), (106, 'Mateo', 102), (110, 'Nikki', 103), (104, 'Paulo', 103), (105, 'Richard', 103), (120, 'Saanvi', 104), (200, 'Shirley', 104), (201, 'Sofía', 102), (205, 'Zhang', 104);

Berikut ini adalah bagan organisasi untuk departemen John.

Diagram bagan organisasi untuk departemen John.