Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mengenansicht als SQL-Statement (https://www.delphipraxis.net/22494-mengenansicht-als-sql-statement.html)

barnti 18. Mai 2004 10:00


Mengenansicht als SQL-Statement
 
Hallo,

ich möchte das Folgende als sql-Statement formulieren:

1. Menge Auftrag

2. Menge Position

Die beiden Mengen haben eine Schnittmenge. Ich möchte jetzt ein Statement formulieren, welches mir nur Elemente aus der Menge Position liefert. Also alle Elemente 'Position' abzüglich der Schnittmenge. Alles verstanden?

Wie müsste ein solches Statement lauten?

Danke!

Sharky 18. Mai 2004 10:40

Re: Mengenansicht als SQL-Statement
 
Zitat:

Zitat von barnti
.... Alles verstanden?....

Ehrlichgesagt: NEIN ;-)
Hast Du eine Tabelle mit den Aufträgen und eine mit den Positionen aller Aufträge und möchtest jetzt zu einem Auftrag alle Positionen?

sakura 18. Mai 2004 10:44

Re: Mengenansicht als SQL-Statement
 
Versuche mal
SQL-Code:
SELECT * FROM [Position] LEFT JOIN [Auftraege] ON [Postion].[RelId] = [Auftraege].[RelId] WHERE [Auftrage].[RelId] = NULL
...:cat:...

barnti 18. Mai 2004 10:57

Re: Mengenansicht als SQL-Statement
 
Hallo,

was ich möchte ist eine allgemeine Beschreibung in einem sql-Stetement, dass mir die Mengenbildung wie beschrieben zurückliefert.

Ich habe zwei Mengen, die eine gemeinsame Schnittmenge haben. Ergebnis sollen alle Elemente sein, die nur einer Menge angehören.

Jetzt besser? ;)

PhaTTy 18. Mai 2004 18:03

Re: Mengenansicht als SQL-Statement
 
Sorry ich versteh dich immer noch nicht ganz. Poste doch bitte mal ein Datenmodell oder eine Demodatenbank in Access. Ich denke dann wird dir sofort jemand eine passende Antwort geben können.

Leuselator 18. Mai 2004 18:47

Re: Mengenansicht als SQL-Statement
 
wenn beide Tabellen (Auftrag und Position jeweils das Schlüsselfeld "idAuftrag" enthalten, dann:
SQL-Code:
SELECT * FROM AUFTRAG
WHERE idAuftrag NOT IN (SELECT idAuftrag
                          FROM Position)
Gruß

barnti 19. Mai 2004 07:33

Re: Mengenansicht als SQL-Statement
 
Hallo Leuselator,


Zitat:

Zitat von Leuselator
wenn beide Tabellen (Auftrag und Position jeweils das Schlüsselfeld "idAuftrag" enthalten, dann:
SQL-Code:
SELECT * FROM AUFTRAG
WHERE idAuftrag NOT IN (SELECT idAuftrag
                          FROM Position)
Gruß

Das ist mein Gedanke. Leider unterstützt mysql (noch) keine Unterabfragen. Daher auch nicht 'intersect'. Lediglich 'Union' wird bereitgestellt.

@PhaTTy:
Es geht hier um eine theoretische Beschreibung. Es gibt kein Datenmodell!

Leuselator 19. Mai 2004 09:01

Re: Mengenansicht als SQL-Statement
 
SQL-Code:
         SELECT A.*
           FROM Auftrag A
LEFT OUTER JOIN Position B
             ON B.idAuftrag = A.idAuftrag
          WHERE B.idPosition IS NULL
Code:
Erläuterung - DB-Engine geht eventuell in anderer Weise vor,
aber für Dich zum nachvollziehen:

1. Schritt: erzeugt Tabelle mit Allen Spalten aus beiden Tabellen
2. Schritt: füllt Tabelle mit allen Zeilen aus Auftrag
3. Schritt: wenn Position mit gleicher idAuftrag vorhanden vorhanden,
            werden die entsprechenden Zeilen mit den Werten aus Position
            ergänzt - alle anderen "Positionsspalten" bleiben leer (NULL)
4. Schritt: beschränkt Ergebnis auf die Zeilen, in denen die
            "Positionsspalten" leer sind (das ist Deine Wunschmenge)
5. Schritt: beschränkt Ergebnisspalten auf die, welche aus Tabelle
            Auftrag stammen (A.*)
Gruß

Edit: Ich sehe gerade, dass Sakura schon nahe dran war - nur fehlt das "outer" in seinem Join - ohne "outer" kommen nur die Schnittmengenzeilen und nicht alle Positionszeilen in das Ergebnis...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz