Was wird die SQL-Abfrage in SQL Server für die markierte Abfrage auf Bild unten sein?SQL-Abfrage auf Supervisor-Tabelle
Finden Sie alle Supervisoren (direkt und indirekt) von Bob
Was wird die SQL-Abfrage in SQL Server für die markierte Abfrage auf Bild unten sein?SQL-Abfrage auf Supervisor-Tabelle
Finden Sie alle Supervisoren (direkt und indirekt) von Bob
;WITH CTE AS (
SELECT Supervisor
FROM t
WHERE Person='Bob'
UNION ALL
SELECT tt.Supervisor
FROM t tt
INNER JOIN CTE ON CTE.Supervisor = tt.Person
)
SELECT *
FROM CTE
Ich habe zwei Fehler auf diesem: 1) ungültige Spalte Name Person und 2) Mehrdeutige Spalte Name Supervisor. –
Versuchen:
DECLARE @T TABLE (Person NVARCHAR(30) , Supervisor NVARCHAR(30));
INSERT INTO @T VALUES
('Bob','Alice'),('Mary','Susan'),('Alice','David'),('David','Mary');
select T.Supervisor
from @T T
Where T.Person = 'Bob'
union all
Select TT.Supervisor
From @T TT inner join @T A
on A.Supervisor = TT.Person
Diese Abfrage würde für keine andere Person als Bob funktionieren. All dies setzt voraus, dass Bob kein Vorgesetzter von irgendjemand anderem ist und listet dann alle Vorgesetzten auf. Ist das der beste Ansatz? Kann keine allgemeinere Lösung gefunden werden? – Krash
Die Informationen in Ihrer Frage gegeben ist nicht genug, um geben Sie eine Antwort, da es keine der Beziehungen zwischen den beiden ta beschreibt oder auch wenn es sich um Tabellen oder nur um Spalten derselben Tabelle handelt. –
Tun Sie es in einer rekursiven cte, im Wesentlichen Sie Union 2 Abfragen wo Supervisor = Person und Sie beziehen sich auf die Cte in der zweiten – Mihai
Es ist die einzige Tabelle mit zwei Spalten. @LudvigRydahl –