AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

Ein Thema von juergen · begonnen am 6. Apr 2012 · letzter Beitrag vom 6. Apr 2012
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 14:24
Datenbank: Pervasive • Version: 11 • Zugriff über: PDAC
Hallo zusammen,

ich muss 3 Tabellen abfragen, wo mir einfach die Erfahrung/ Wissen fehlt wie ich das ausführen muss.

Tabellenaufbau:

Adresstamm (Master, Tabellenname = AA)
Kontaktpersonen (Detail, Tabellenname = A2)
Wartungsvertrag (Detail, Tabellenname = R6)

Zu jedem Adresstamm *kann* es eine oder mehrere Kontaktpersonendatensätze geben. Bis hierhin kein Problem!


Select A.xxx, P.xxx from AdressStamm as A left JOIN Kontaktpersonen as P on P.DBAA_RECID = A.Identifikation

Für die dritte Tabelle gilt auch: Zu jedem Adresstamm *kann* es eine oder mehrere Wartungsvertragsdatensätze geben.

Und genau da hänge ich. Ich hatte mir gedacht ich hänge da einfach noch ein Left Join dran genau wie bei den ersten beiden Tabellen:

Delphi-Quellcode:
Select A.xxx, P.xxx, W.xxx from AdressStamm as A left JOIN Kontaktpersonen as P on P.DBAA_RECID = A.Identifikation,
AdressStamm left JOIN Wartungsvertrag as W on W.DBAA_RECID = AdressStamm.Identifikation
Es erscheint kein Fehler aber die Abfrage rennt seit Stunden....
Die "DBAA_RECID"-Felder sind jeweils Keys.

Weiß jemand in welche Richtung ich meine Unwissenheit erweitern muss? Darf/sollte man 2 Left Join Abfragen nicht anwenden, bzw. wie löst man dann solch eine Anforderung?

Vielen Dank schon mal im Voraus!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 14:27
Man kann das schon machen, da es sich aber um 2 verschiedene Dinge handelt ( Kontaktpersonen, Wartungsverträge) ist die Frage, wie soll das Ergebnis aussehen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 14:33
Wenn ich das richtig sehe, joinst Du Adressstamm noch einmal dazu, das dürfte dann einen CROSS JOIN ergeben, was natürlich unheimlich aufhält und nichts bringt. Ich denke, Du meinst das etwa so:
SQL-Code:
SELECT
  A.xxx, P.xxx, W.xxx
FROM
  AdressStamm AS A
LEFT JOIN
  Kontaktpersonen AS P ON P.DBAA_RECID = A.Identifikation
LEFT JOIN
  Wartungsvertrag AS W ON W.DBAA_RECID = A.Identifikation
[edit] Außerdem siehe Markus' Einwand, ich habe mich auch bereits gefragt, was das werden soll. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 14:48
Hallo,

ich möchte zu jedem Adresstamm jeweils *alle* Kontaktpersonen und jeweils *alle* Wartungsverträge als Ergebnis haben, natürlich nur die, welche auch zu dem jeweiligen Adresstamm gehören. Es kann sein, dass es keine Wartungsverträge zu *jedem* Adresstamm gibt. Auch bei den Kontaktpersonen kann es sein, dass es keinen Datensatz zu *jedem* Adresstamm gibt.
Dann müssen trotzdem *alle* Adresstamm-Datensätze ausgewiesen werden.

Aus diesem Grunde hatte ich mir Left Join rausgesucht.

Edit @DeddyH:
Auf die Schnelle scheint es zu funktionieren. Ich muss das im Detail noch prüfen.
Vielen Dank für eure wirklich schnelle Hilfestellung und noch einen schönen Feiertag!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 14:56
Dann würde ich das als Bedingung angeben

SQL-Code:
select
    <Feldliste>
from
    Adressstamm a
where
    exists ( select DBAA_RECID from Kontaktperson p where p.DBAA_RECID = a.Identifikation union select DBAA_RECID from Wartungsvertrag w where w.DBAA_RECID = a.Identifikation);

Nach nochmaligen Lesen des vorigen Beitrages, habe ich gesehe, dass ich ihn falsch verstanden habe
Markus Kinzler

Geändert von mkinzler ( 6. Apr 2012 um 15:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 14:58
Ist das dann nicht ein INNER JOIN, oder mache ich gerade einen Denkfehler?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 15:02
Im Originalbeispiel sind es alles Innerjoins. Ein Outerjoin würde ja alle Datensätze eier Tabelle liefern.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 15:05
Im Original sind es OUTER JOINS, Du hast vermutlich das LEFT übersehen, weil Jürgen es klein geschrieben hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 15:11
Ich habe seine Antwort nocheinmal gelesen und gesehe, dass ich ihn falsch verstanden habe.
Er will ja alle Adressen haben, mit jeweils verknüpften Kontaktpersonen und Wartungsverträgen; also ist LEFT OUTER JOIN richtig.

Mir ist aber immer noch nicht klar, wie er diese Infomationen in der Ergenismenge erhalten will ( Personen/Verträge als Listen in einem Feld?)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Abfrage von 3 Tabellen mit 2x Left Join.... Geht das?

  Alt 6. Apr 2012, 15:21
@mkinzler,

ich "verteile" die Ergebnismenge auf relativ viele Spalten in ein Quantum-Grid.
Es gibt dann 2 Optionen der Anzeige:
1. Nur Adresstamm (dann gibt es pro Adresstamm auch nur einen Datensatz)
2. Adresstamm mit Kontaktpersonen und mit Wartungsverträgen (dann gibt es so viele Datensätze pro Adresstamm wie es Kontaktpersonen und Wartungsvertäge gibt)


Das Ganze scheint wie gewünscht zu funktioneren (mit Vorschlag von DeddyH aus Post #3.

Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen ( 6. Apr 2012 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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