Forums Neueste Beiträge
 

Knifflige SQL-Abfrage

14/07/2008 - 15:44 von Michaela Meier | Report spam
Hi,

Ich habe eine Tabelle die, ungefàhr so aussieht:

Index - Inhalt - Nachfolger
1 - P - 3
2 - G - 0
3 - I - 4
4 - N - 2

Wobei der 'Nachfolger' jeweils festlegt, welcher 'Index' als nàchstes
ausgelesen werden soll bis es keinen Nachfolger mehr gibt.
In dem obigen Beispiel ergàbe sich damit das Wörtchen P-I-N-G.

Zur Zeit erledige ich diese "Sortierung" per Code in einem DataTable.
Nun möchte ich dies aber in einem Rutsch per SQL erledigen lassen. Ist
das in dem Fall überhaupt möglich? Wenn ja, wie müßte die Abfrage
aussehen oder würde eine Relation der Tabelle auf sich selbst
irgendwie helfen?

Danke
 

Lesen sie die antworten

#1 Elmar Boye
14/07/2008 - 16:58 | Warnen spam
Hallo Michaela,

Michaela Meier schrieb:
Ich habe eine Tabelle die, ungefàhr so aussieht:

Index - Inhalt - Nachfolger
1 - P - 3
2 - G - 0
3 - I - 4
4 - N - 2

Wobei der 'Nachfolger' jeweils festlegt, welcher 'Index' als nàchstes
ausgelesen werden soll bis es keinen Nachfolger mehr gibt.
In dem obigen Beispiel ergàbe sich damit das Wörtchen P-I-N-G.

Zur Zeit erledige ich diese "Sortierung" per Code in einem DataTable.
Nun möchte ich dies aber in einem Rutsch per SQL erledigen lassen. Ist
das in dem Fall überhaupt möglich? Wenn ja, wie müßte die Abfrage
aussehen oder würde eine Relation der Tabelle auf sich selbst
irgendwie helfen?



Leider hast Du uns nicht das Datenbank-System verraten,
denn die Lösung hàngt von dessen Möglichkeiten ab.

Für einen SQL Server 2005 und spàter sàhe das z. B. wie folgt aus:
CREATE TABLE dbo.Tabelle (
id int NOT NULL PRIMARY KEY,
wert varchar(10),
nachfolger_id int NOT NULL )
INSERT INTO dbo.Tabelle VALUES(1, 'P', 3)
INSERT INTO dbo.Tabelle VALUES(2, 'G', 0)
INSERT INTO dbo.Tabelle VALUES(3, 'I', 4)
INSERT INTO dbo.Tabelle VALUES(4, 'N', 2)
GO

WITH Hierarchie (id, wert, nachfolger_id, stufe)
AS
(
SELECT t.id, t.wert, t.nachfolger_id, 1 AS stufe
FROM dbo.Tabelle AS t
WHERE t.nachfolge_id = 0
UNION ALL
SELECT t.id, t.wert, t.nachfolger_id, stufe + 1
FROM dbo.Tabelle AS t
INNER JOIN Hierarchie AS h
ON h.id = t.nachfolger_id
)
SELECT * FROM Hierarchie
ORDER BY Stufe DESC

Bei SQL Server 2000 geht àhnliches mit einem Batch (gibts bei Bedarf).
Andere RDBMS kennen vergleichbare Konstrukte.

Bei Access/Jet und anderen müsstest Du allerdings mehr Code im
Client schreiben, der die entsprechende SQL Anweisungen erstellt.

Gruß Elmar

Ähnliche fragen