Autor Beitrag
NetProg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mi 28.12.11 19:03 
Hallo, liebe Forengemeinde.

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

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 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 diese wird als TreeView anhand PARENTID so angezeigt:

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:

ausblenden Quelltext
1:
2:
3:
4:
5:
 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.

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

Wie bekomme ich es hin, das halt nur Elterneinträge angezeigt werden wo auch Kindereinträge vorhanden sind.
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 SELECT Gruppen.ID,
        Gruppen.PARENTID,
        Gruppen.ProjektID,
        Gruppen.Bezeichnung FROM Gruppen

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

 ON Gruppen.ID = GrAbfrage.Gruppe

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


Vielen Dank schonmal für Eure Hilfestellungen und einen guten Rutsch ins neue Jahr.

Moderiert von user profile iconMartok: SQL-Tags hinzugefügt
Moderiert von user profile iconMartok: Code-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 28.12.11 22:08 
ala ...
ausblenden Quelltext
1:
where ProjektID in (select Distinct ProjektID from Aufmasse)					

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
NetProg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mi 28.12.11 22:20 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Danke erstmal für Deine schnelle Hilfe.
Könntest Du mir freundlicherweise bitte genau aufzeigen, wie bzw. wo ich die WHERE Klausel in meinen
Code aufnehmen sollte, ich hab gerade ein Blackout glaub ich ...

Danke Dir schonmal
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 28.12.11 22:51 
naja entweder einfach
ausblenden Quelltext
1:
2:
3:
select * 
FROM Gruppen
where ProjektID in (select Distinct ProjektID from Aufmasse)


oder wenn Du mehr brauchst kannst Du ja erst mal über einen Left Join den Rest aus den Aufmassen hinzujoinen und dann die Where-Bedingung anhängen.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
NetProg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Do 29.12.11 00:27 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Ich glaub ich hab da einen Punkt nicht erwähnt oder nicht korrekt erklärt, denn in der Aufmaßblatttabelle wird nie ein Elternobjekt eingetragen, sondern nur Kinderobjekte.
Die Elternobjekte (EG, 1.OG usw.) werden nur zu Gruppierungszwecken benutzt. Daher auch meine o.g. Abfrage. Aber wie gesagt wird, so bald für alle Kindeinträge des jeweiligen
Elternobjektes ein Aufmaßblatt vorhanden ist, auch das jeweilige Elternobjekt im Tree angezeigt. Was eigentlich nicht erwünscht ist, da zu diesem Elternobjekt kein weiteres
Aufmaßblatt angelegt werden kann. Vieleicht kann man auch das TreeView dazu bewegen nur Elterneinträge mit Kindeinträgen anzuzeigen ?????????????

Dennoch vielen lieben Dank erstmal an dich !
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 29.12.11 09:44 
Mir ist die Verknüpfung zwischen Deinen Tabellen nicht klar.
Ein anderer Ansatz wäre
- zuerst eine Sicht X zu bauen, FULL JOIN nicht LEFT
- Deine Menge wie bisher abzufragen mit der zusätzlichen Bedingung
ausblenden Quelltext
1:
WHERE bzw. AND ((ParentID <> 0) or (ID in (Select Distinct ParentID from X)))					

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS