Komplexe Abfrage

Netprog

Benutzer
Beiträge
10
Hallo, liebe Forengemeinde.

Ich steh mal wieder vor einem Problem, und zwar hab ich eine Access - Tabelle welche in Delphi mittels ADO in einem Tree angezeigt wird mit folgendem Aufbau:

ID | PARENTID | PROJECTID | BEZEICHNUNG
1 |0| 19| EG
2 |1| 19| Achse A-D
3 |1| 19| Achse E-G
4 |0|19| 1. OG
5 |4| 19| Achse A-D
6 |4| 19| Achse E-G
usw.


Und wird demnach als Tree anhand PARENTID so angezeigt wird:

EG
- Achse A-D
- Achse E-G
1.OG
- Achse A-D
- Achse E-G

In einer weiteren Tabelle habe ich jeweils ein Aufmaßblatt mit folgendem Aufbau:

ID | PROJECTID | GRUPPE | BEZEICHNUNG | ABMESSUNGEN
1 |19 | 2 | Wand 1 | 3,45 * 3,36
2 |19| 3 | Wand 2| 7,31 * 3,36
3 |19| 6 | Wand 1 | 2,25 * 1,25
usw.

Nun zu meinem eigentlichen Problem , ich zeige nun mit folgendem SQL-Code die Gruppen an
zu denen noch kein Eintrag in der Aufmaßblatttabelle vorhanden ist.
Störend ist nur, sollte schon zu allen Kindeinträgen (PARENTID <> 0) bsp. im EG , Einträge im Aufmaßblatt vorhanden
sein, so wird dennoch der Elterneintrag (PARENTID = 0) als EG im Tree angezeigt.
Wie bekomme ich es hin, das halt nur Elterneinträge angezeigt werden wo auch Kindereinträge vorhanden sind.

SELECT Gruppen.ID,
Gruppen.PARENTID,
Gruppen.ProjektID,
Gruppen.Bezeichnung FROM Gruppen

LEFT JOIN (SELECT DISTINCT Aufmasse.ProjektID,
Aufmasse.Gruppe FROM Aufmasse
WHERE Aufmasse.ProjektID = 19) AS GrAbfrage

ON Gruppen.ID = GrAbfrage.Gruppe

WHERE GrAbfrage.Gruppe IS NULL
AND Gruppen.ProjektID = 19

Vielen Dank schonmal für Eure Hilfestellungen und ein frohes Weihnachtsfest.
 
Werbung:
Hallo Netprog,

könnte so gehen:

SELECT Gruppen.ID,
Gruppen.PARENTID,
Gruppen.ProjektID,
Gruppen.Bezeichnung FROM Gruppen

LEFT JOIN (SELECT DISTINCT Aufmasse.ProjektID,
Aufmasse.Gruppe FROM Aufmasse
WHERE Aufmasse.ProjektID = 19) AS GrAbfrage

ON Gruppen.ID = GrAbfrage.Gruppe

WHERE GrAbfrage.Gruppe IS NULL
AND Gruppen.ProjektID = 19
AND Gruppen.ID IN (SELECT PARTENTID FROM Gruppen)

Gruß Charly
 
@Charly

Danke für Deinen Lösungsansatz. Leider bekomme ich beim Testen damit nur alle Elterneinträge alla PARENTID = 0 angezeigt:(

EG
1.OG

Bin daher auch weiter am tüfteln und für jede Hilfe dankbar !!!

MfG
 
Sorry. Denkfehler.:(

ich baue mir mal die Tabellen auf. Dann gibts auch eine funktionsfähige Lösung.

Gruß Charly.
 
Werbung:
Hallo Netprog,

Damit müsste es laufen.

Code:
select g.* from gruppen as g
left join aufmasse as a on a.gruppe=g.id
where a.id is null and parentid > 0
union
select * from gruppen
where id in (
    select g.parentid from gruppen as g
    left join aufmasse as a on a.gruppe=g.id
    where a.id is null and parentid > 0
    )

Gruß Charly
 
Zurück
Oben