Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL join Problem (https://www.delphipraxis.net/210883-sql-join-problem.html)

TurboMagic 26. Jun 2022 09:58

Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC

SQL join Problem
 
Hallo,

ich habe gerade ein Problem das passende SQL Statement zusammen zu bekommen.

Gegeben sind diese 3 Tabellen:

1. "Positionen" mit diesen Feldern:
BelegID
ZeileNr
ArtNr

2. "Steuer" mit diesen Feldern:
BelegID
ZeileNr
Brutto

3. "Artikel "
ArtNr
Name

Jetzt will ich für eine gegebene BelegID alle Daten aller Positionen inkl.
deren Steuern und der Artikelnamen möglichst in einem Select abfragen.
Nur: ArtNr. kann auch -1 sein, dann ist kein Artikel vorhanden sondern ein
anderer "Belegvorfall".

Was ich bisher versuchte aber bei Konstellationen mit ArtNr. = -1 keine Daten lieferte:

select Po.BelegID, Po.ZeileNr, St.Brutto, A.Name
from Positionen Po, Steuer St, Artikel A
where (Po.BelegID = 4711) and
(St.BelegID = Po.BelegID) and
(St.ZeileNr = Po.ZeileNr) and
(A.ArtNr = Po.ArtNr)

Nehme ich (A.ArtNr = Po.ArtNr) raus, bekomme ich doppelte Einträge, nehme ich es rein,
bekomme ich für ArtNr = -1 keine Einträge.

Irgendwie muss ich das wohl passend "Joinen", aber wie?

Grüße
TurboMagic

mjustin 26. Jun 2022 10:36

AW: SQL join Problem
 
CASE ist hier ein Lösungsweg:

https://firebirdsql.org/refdocs/langrefupd15-case.html

TurboMagic 26. Jun 2022 10:41

AW: SQL join Problem
 
Danke schon mal für den Tipp, aber: ist das dann die komplette Lösung?
Oder bekomme ich wenn ich die Abfrage durch ein Case geschützt als weiteres einfaches "and"
anhänge evtl. ein Kreuzprodukt oder sowas?

dataspider 26. Jun 2022 10:54

AW: SQL join Problem
 
IMO muss die Tabelle Artikel mit einem left [outer] join verbunden werden...
Du willst ja - auch wenn rechts kein Datensatz mit der join - Bedingung existiert, die Daten links trotzdem anzeigen.

In etwa so:
SQL-Code:
select
  po.belegid
, po.zeilenr
, st.brutto
, coalesce(a.name, 'Kein Artikel') artikel
  from positionen po
  join steuer st on st.belegid = po.belegid and st.zeilenr = po.zeilenr
  left join atrikel a on a.artnr = po.artnr
  where po.belegid = 4711
Frank

TurboMagic 26. Jun 2022 12:29

AW: SQL join Problem
 
Funktioniert! Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 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