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.
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