![]() |
Datenbank: MySQL • Version: 5.1.11 • Zugriff über: UniDAC
[SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Ahoi!
Ich habe hier eine Tabelle der Struktur (ID, Text, ParentID). Ich möchte jetzt gerne in einem Select ein Feld zusammen setzen, dass alle "Text" hintereinander enthält bis ein ParentID=NULL erreicht ist, und zwar beginnend mit dem letzten Parent. Folgende hypothetische Tabelle:
Code:
Dann brauche ich in meiner Ergebnismenge einen Datensatz
ID Text ParentID
---------------------------- 0 "Hallo" NULL 1 "Satz" 2 2 "ein" 4 3 "ich" 0 4 "bin" 3
Code:
Die Ergebnismenge besteht dabei jedoch nicht nur aus einem einzelnen Datensatz, sondern derer Kaskaden können in der Basistabelle mehrfach sein, und auch unterschiedlich tief.
ID Text
----------------------------- 1 "Hallo ich bin ein Satz" Es gibt mehr Felder als nur diese drei, und die anderen Felder sollen die Werte des gerade aufgelösten Datensatzes beibehalten. Es soll zudem jeder Datensatz aufgelöst werden. Beispiel:
Code:
|
ID Text ParentID Info
----------------------------------------- 0 "Firma A" NULL "foo" 1 "Firma B" NULL "bar" 2 "Abteilung X" 0 "xxx" 3 "Werk 1" 1 "werk" 4 "Abteilung Y" 3 "yyy" | v
Code:
ID Text Info
------------------------------------------- 0 "Firma A" "foo" 1 "Firma B" "bar" 2 "Firma A Abteilung X" "xxx" 3 "Firma B Werk 1" "werk" 4 "Firma B Werk 1 Abteilung Y" "yyy" Wie kann ich dieses beim selecten mit SQL am besten erreichen? Besten Dank im Voraus, Medium |
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Zitat:
|
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
in Oracle hilft Dir CONNECT BY weiter, aber ich weiß nicht ob MySQL das auch kann.
Gruß K-H |
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
CONNECT BY habe ich in der MySQL Referenz leider nicht gefunden (wäre ja perfekt), aber ich glaube die Tiefe eingrenzen zu können. Den JOIN hatte ich auch im Sinn, war nur aus mir gerade nicht weiter bekannten Gründen der Auffassung, dass man eine Tabelle nicht mit sich selbst joinen konnte :stupid:. Ich probier das mal. Merci!
|
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Warum sollte man eine Tabelle nicht mit sich selber Joinen können?
|
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Gibt es im MySQL temporäre Tabellen und Proceduren die diese als Result, sowie einfache Schleifenkonstrukte ("While") zurückliefern können?
Unter MS-SQLServer habe ich ähnliches auf die Art lösen können. |
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Oder einer rekursiven SP
|
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Der JOIN klappt, allerdings werden leider auch nur die Sätze zurückgeliefert, die die entsprechende Tiefe aufweisen :(
Sind rekursive SPs in MySQL überhaupt wieder möglich? Mein letzter Stad war, dass dies aus technischen Gründen mal entfernt wurde. Edit: Okay, gibt's, ist aber off-by-default. Bummi, was du genau sagen willst, versteh ich gerade nicht so recht :oops: |
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
In MySQL kenne ich mich nicht so aus ( lange her) bei FB geht das, der kennt baer auch rekursive CTE
|
AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
etwas in der Art
SQL-Code:
Select Cast(ID as Int) as ID, Parent, Cast([text] as Varchar(4000)) as text
into #tmp from tree --where Parent is NULL While Exists(Select * from #tmp join tree on tree.Parent=#tmp.ID) Update #tmp set text = #tmp.text +' '+ tree.Text ,#tmp.ID=tree.id from tree where tree.Parent=#tmp.ID Select * from #tmp Drop table #tmp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz