Hiyerarşi Üzerinde Gezinme
Coddy'nin SQL Journey'sinin Temellerin Ötesi bölümünün bir parçası. Ders 21 / 27.
Özyinelemeli CTE'lerin var olmasının asıl nedeni: tek bir tabloda saklanan üst/alt ilişkisi üzerinde gezinmek. employees tablosunda aynı tabloya geri işaret eden bir manager_id sütunu olduğunu varsayalım:
WITH RECURSIVE chain AS (
SELECT id, name, manager_id
FROM employees WHERE id = 7 -- çapa: başlangıç çalışanı
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN chain c ON e.id = c.manager_id -- özyinelemeli: yöneticiye atla
)
SELECT * FROM chainHer adım, CTE’yi employees tablosuna yeniden birleştirerek ağaçta bir seviye yukarı çıkar. Bir row yöneticisi olmadığında (JOIN hiçbir şeyle eşleşmediğinde) özyineleme doğal olarak durur.
Görev
OrtaKullanılabilir tablolar ve sütunlar:
categories:id,name,parent_id
Her kategorinin, başka bir kategoriye işaret eden isteğe bağlı bir parent_id değeri vardır. Kategori id = 1’in alt kategorileri, alt kategorilerinin alt kategorileri ve devamı olan tüm kategorileri döndürün; ancak 1. kategorinin kendisini döndürmeyin. id ve name değerlerini döndürün ve sonuçları id değerine göre sıralayın.
Kendin dene
WITH RECURSIVE descendants AS (
-- anchor: id 1'in doğrudan çocukları
-- recursive: onların çocukları, vb.
)
SELECT id, name FROM descendants ORDER BY id
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temellerin Ötesi bölümündeki tüm dersler
2String Fonksiyonları
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE ve TRIM|| ile BirleştirmeÖzet - FaturalarKendi başına pratik yap: SQL playground