← Alle AufgabenSQL · Senior

Alle Untergebenen mit einer rekursiven CTE

Liste alle direkten und indirekten Untergebenen des Mitarbeiters mit id = 1 auf: Spalten id, name und depth (1 für einen direkten Untergebenen, 2 für den Untergebenen eines Untergebenen und so weiter). Sortiert nach depth, dann id. Die Tiefe der Hierarchie ist vorab nicht bekannt.

Tabellen

CREATE TABLE employees (
  id         int PRIMARY KEY,
  name       text NOT NULL,
  manager_id int REFERENCES employees (id)  -- NULL for the CEO
);

Tests (3)

Jeder Test füllt die Tabellen mit eigenen Daten und vergleicht das Ergebnis deiner Abfrage mit dem erwarteten: dieselben Spalten (Namen und Reihenfolge) und dieselben Zeilen in derselben Reihenfolge, ORDER BY zählt also. Die Abfrage läuft in echtem PostgreSQL direkt im Browser; der erste Start lädt es herunter (etwa 5 MB).

  1. INSERT INTO employees VALUES
      (1, 'CEO', NULL),
      (2, 'CTO', 1), (3, 'CFO', 1),
      (4, 'Dev lead', 2), (5, 'Accountant', 3),
      (6, 'Developer', 4), (7, 'Intern', 6);
  2. -- another branch of the company is not included
    INSERT INTO employees VALUES
      (1, 'Head of A', NULL), (9, 'Head of B', NULL),
      (2, 'A1', 1), (3, 'B1', 9), (4, 'A2', 2);
  3. -- nobody reports to employee 1
    INSERT INTO employees VALUES (1, 'Solo', NULL), (2, 'Other', NULL);