SQL Abfrage

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

SQL Abfrage

Beitrag von slai »

Hallo zusammen

Habe da ein Problem mit einem SQL:

Code: Alles auswählen

 
SELECT BD.*, ART.*, G.*, M.* FROM 
BESTELLDETAIL BD INNER JOIN 
(
   ARTSTAMM ART INNER JOIN
   (
      GEBINDE G INNER JOIN 
      MASSE M
      ON G.IMASSGEWICHT = M.ID
      )
   ON ART.BGEBINDE = G.ID
) ON BD.IARTIKELID = art.ID
 
WHERE 
BD.IBESTELLKOPFID = '27'
 
Dieser wird korrekt ausgeführt und listet mir alle Artikel auf die diese Verbindungen erfüllen und in der Bestellung "27" vorkommen.

Mein Problem ist nun das ich jedoch zusätzlich noch einen oder mehrere diverse Artikel habe die nicht
mit der Artikelstamm Tabelle verknüpft sind und die Artikelnr -1 besitzen im Bestelldetail, zusätzlich
noch einen Rundungsdifferenz Artikel 0. Diese werden nun natürlich nicht im Query angezeigt.
Weiss jemand wie man das lösen kann das der SQL zusätzliche Artikel mit der ID 0 und -1 anzeigt die jedoch
nicht eine solche Verknüpfung mit Artstamm, und folgende tables, besitzen?

Danke für Antworten
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: SQL Abfrage

Beitrag von monta »

Ich würde mal sagen, ein LEFT/RIGHT/FULL OUTER JOIN damit die Spalten trotzdem aufgefüllt werden und dann einfach ein OR in die WHERE-Klausel

Code: Alles auswählen

WHERE
(BD.IBESTELLKOPFID = '27') OR
(art.ID = 0)
Johannes

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Re: SQL Abfrage

Beitrag von slai »

Hey Monta

Danke dir für die schnelle Antwort!
Und es funktioniert :-) sogar ohne (art.ID = 0) :-)

Code: Alles auswählen

SELECT BD.*, ART.*, G.*, M.* FROM 
BESTELLDETAIL BD FULL OUTER JOIN 
(
ARTSTAMM ART FULL OUTER JOIN
(
GEBINDE G FULL OUTER JOIN 
MASSE M
ON G.IMASSGEWICHT = M.ID
)
ON ART.BGEBINDE = G.ID
) ON BD.IARTIKELID = art.ID
 
WHERE 
(BD.IBESTELLKOPFID = '3' )
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

Antworten