İleri sorgu teknikleri
Recursive CTE ve hiyerarşiler
Yönetici ağacından çok seviyeli verilere.
Kavramı anlayalım
Recursive CTE bir başlangıç kümesi ve ona tekrar bağlanan recursive üyeden oluşur. UNION ALL yaygın biçimde seviyeleri birleştirir. Employee ağacında önce yöneticisi olmayan kaydı alır, sonra mevcut seviyenin çalışanlarına bağlı alt çalışanları buluruz.
Hatalı döngü içeren veri sonsuz tekrar üretebilir. SQL Server varsayılan recursion sınırı uygular; MAXRECURSION ile kontrollü sınır belirle. Sınırsız 0 seçeneğini veri doğrulanmadan kullanma. Yol ve derinlik tutmak hata incelemeyi kolaylaştırır; cycle kontrolü ayrıca düşünülmelidir.
Organizasyon ağaçları ve çok seviyeli ilişkiler için.
Döngü kontrolü olmadan MAXRECURSION 0 kullanmak.
Aynı konu. Üç farklı derinlik.
SELECT EmployeeId, FullName FROM lab.Employee WHERE ManagerId IS NULL;Anchor kaydı Rasim’dir.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Rasim’e bağlı çalışan ağacını derinlik bilgisiyle getir.
Çözümü ve açıklamasını göster
WITH T AS (SELECT EmployeeId, FullName, 0 AS Depth FROM lab.Employee WHERE EmployeeId = 1 UNION ALL SELECT e.EmployeeId, e.FullName, t.Depth + 1 FROM lab.Employee AS e JOIN T AS t ON e.ManagerId = t.EmployeeId) SELECT * FROM T ORDER BY Depth, EmployeeId OPTION (MAXRECURSION 20);Derinlik bir iş seviyesi göstergesidir; sonuç sırası ayrıca ORDER BY ile belirlenir.