Hiyerarşi Üzerinde Gezinme
Coddy'nin SQL Journey'sinin Temellerin Ötesi bölümünün bir parçası — ders 21 / 27.
Özyinelemeli (recursive) CTE'lerin var olmasının asıl nedeni: tek bir tabloda saklanan ebeveyn/çocuk ilişkisi üzerinde gezinmektir. Diyelim ki employees tablosunun, aynı tabloya geri işaret eden bir manager_id sütunu var:
WITH RECURSIVE chain AS (
SELECT id, name, manager_id
FROM employees WHERE id = 7 -- anchor: 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 -- recursive: yöneticiye atla
)
SELECT * FROM chainHer adım, ağaçta bir seviye yukarı atlayarak CTE'yi tekrar employees tablosuna bağlar. Bir satırın yöneticisi olmadığında (JOIN hiçbir şeyle eşleşmediğinde) özyineleme doğal olarak durur.
Görev
OrtaMevcut tablolar ve sütunlar:
<strong>categories</strong>:<strong>id</strong>,<strong>name</strong>,<strong>parent_id</strong>
Her kategorinin, başka bir kategoriyi işaret eden isteğe bağlı bir parent_id değeri vardır. Kategori id = 1'in alt dalları olan (çocukları, torunları, …) ancak kategori 1'in kendisi olmayan tüm kategorileri döndürün. id ve name sütunlarını döndürün, id sütununa göre sıralayın.
Kopya kağıdı
Tek bir tabloda saklanan (örneğin, aynı tabloyu işaret eden bir manager_id veya parent_id sütunu) üst/alt ilişkilerini gezmek için özyinelemeli (recursive) CTE'ler kullanın:
WITH RECURSIVE chain AS (
SELECT id, name, manager_id
FROM employees WHERE id = 7 -- anchor: başlangıç satırı
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN chain c ON e.id = c.manager_id -- recursive: üst öğeye geç
)
SELECT * FROM chainÖzyineleme, JOIN eşleşen satır bulamadığında (örneğin, yöneticisi olmayan bir satır) doğal olarak durur.
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 - Faturalar