Jag använder SQL Server 2014.
Kan man använda kolumner från en subquery i en selectsats? Äh, jag knåpar ihop ett usecase här istället, det blir lättare att förklara frågeställningen så istället.
Min tabell:
Tabellen blir som ett släktträd där varje person har en förälder. Kolumnen Parent pekar på kolumn ID för personens pappa. Gamle farfar Claes har ingen förälder så han får en nolla. För att ta reda på vem som är Anders Anderssons farfar måste jag med klassisk SQL ställa tre frågor:
Fast nu vill jag vara fiffig och få ut namnen på både Anders, hans pappa och hans farfar i en och samma fråga. Jag lyckas hämta namnet på Anders och endast hans pappa så här:
SELECT Namn,
Tabell.Parent,
(SELECT Namn FROM Tabell WHERE ID=Tabell.Parent) AS Pappa (Pappans namn)
FROM Tabell
Men hur fasiken ställer jag en subquery för Anders farfar med resultat från en första subquery med pappans förälder? Jag tänker mig så här, men det funkar inte:
SELECT Namn,
Tabell.Parent,
(SELECT Namn FROM Tabell WHERE ID=Tabell.Parent) AS Pappa, (Pappans namn)
(SELECT Parent FROM Tabell WHERE ID=Tabell.Parent) AS FarfarsID, (Farfars ID i tabellen, den springade punkten så att säga)
(SELECT Namn FROM Tabell WHERE ID=FarfarsID) (Farfars namn)
FROM Tabell
Men det där funkar inte. SQL tycker inte att FarfarsID är en giltig kolumn i sista subqueryn. Och jag vet inte, det spelar som ingen roll hur jag försöker namnge de olika frågorna eller kolumnerna. Jag får inte till det. Jag är för kass på SQL. Är det ens möjligt att göra som jag tänker?
Kan man använda kolumner från en subquery i en selectsats? Äh, jag knåpar ihop ett usecase här istället, det blir lättare att förklara frågeställningen så istället.
Min tabell:
Kod:
ID Namn Parent 1 Anders Andersson 2 2 Bengt Andersson 3 3 Claes Andersson 0
Tabellen blir som ett släktträd där varje person har en förälder. Kolumnen Parent pekar på kolumn ID för personens pappa. Gamle farfar Claes har ingen förälder så han får en nolla. För att ta reda på vem som är Anders Anderssons farfar måste jag med klassisk SQL ställa tre frågor:
Kod:
SELECT Parent FROM Tabell WHERE Namn="Anders Andersson" (Svar: Parent = 2, Anders pappa har alltså ID=2 i tabellen) SELECT Parent FROM Tabell WHERE ID=2 (Svar: Parent = 3, Anders farfar har alltså ID=3 i tabellen) SELECT Namn FROM Tabell WHERE ID=3 (Svar: Namn = Claes Andersson, Anders farfar heter alltså Claes Andersson)
Fast nu vill jag vara fiffig och få ut namnen på både Anders, hans pappa och hans farfar i en och samma fråga. Jag lyckas hämta namnet på Anders och endast hans pappa så här:
SELECT Namn,
Tabell.Parent,
(SELECT Namn FROM Tabell WHERE ID=Tabell.Parent) AS Pappa (Pappans namn)
FROM Tabell
Men hur fasiken ställer jag en subquery för Anders farfar med resultat från en första subquery med pappans förälder? Jag tänker mig så här, men det funkar inte:
SELECT Namn,
Tabell.Parent,
(SELECT Namn FROM Tabell WHERE ID=Tabell.Parent) AS Pappa, (Pappans namn)
(SELECT Parent FROM Tabell WHERE ID=Tabell.Parent) AS FarfarsID, (Farfars ID i tabellen, den springade punkten så att säga)
(SELECT Namn FROM Tabell WHERE ID=FarfarsID) (Farfars namn)
FROM Tabell
Men det där funkar inte. SQL tycker inte att FarfarsID är en giltig kolumn i sista subqueryn. Och jag vet inte, det spelar som ingen roll hur jag försöker namnge de olika frågorna eller kolumnerna. Jag får inte till det. Jag är för kass på SQL. Är det ens möjligt att göra som jag tänker?