1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Komplexe Abfrage

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von Netprog, 23 Dezember 2011.

  1. Netprog

    Netprog Benutzer

    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.
     
  2. Charly

    Charly Datenbank-Guru

    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
     
  3. Netprog

    Netprog Benutzer

    @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
     
  4. Charly

    Charly Datenbank-Guru

    Sorry. Denkfehler.:(

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

    Gruß Charly.
     
  5. Netprog

    Netprog Benutzer

    So, ich hab da mal die Tabellen hochgeladen.
    MfG
     

    Anhänge:

  6. Charly

    Charly Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen