AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit mehrfachen JOIN
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit mehrfachen JOIN

Ein Thema von PASST · begonnen am 11. Jul 2006 · letzter Beitrag vom 14. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 14:05
Datenbank: dbase • Zugriff über: BDE
Hi NG.

Ich möchte per localSQL eine Abfrage über vier Tabellen tab1, tab2, tab3 und tab4 erstellen. Die Beziehungen der Tabellen untereinander sind wie folgt:
Delphi-Quellcode:
tab4 <- tab1 -> tab2 -> tab3
mit -> := OUTER JOIN
Das Query soll alle Sätze aus tab1 anzeigen.
Bisher schaut meine Abfrage so aus:
SQL-Code:
SELECT tab1.FeldA, tab2.FeldB, tab3.FeldC, tab4.FeldD
FROM tab1
LEFT OUTER JOIN tab2
ON (tab1.Feld1=tab2.Feld1) AND (tab1.Feld2=tab2.Feld2)
LEFT OUTER JOIN tab3
ON (tab2.Feld3=tab3.Feld3)
LEFT OUTER JOIN tab4
ON (tab1.Feld4=tab4.Feld4)
WHERE
(tab2.Feld5 IS NULL OR tab2.Feld5=100)
OR
tab3.Feld7 IS NULL
AND
(tab4.Feld6 IS NULL OR tab4.Feld6=100)
Als Ergebnis erhalte ich hierbei mehr Sätze als erwartet.

Lasse ich im SQL-Text die JOIN-Zeile von tab4 weg, so erhalte ich die korrekte Anzahl an Sätzen.

Kann mir jemand einen Tipp geben was ich falsch mache?

Gruß
Peter
  Mit Zitat antworten Zitat
zwaem86

Registriert seit: 4. Jul 2006
16 Beiträge
 
Delphi 7 Professional
 
#2

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 14:55
Hi,

mir ist aufgefallen, dass du noch zwei Klammern vergessen hast.

SQL-Code:
SELECT tab1.FeldA, tab2.FeldB, tab3.FeldC, tab4.FeldD
FROM tab1
LEFT OUTER JOIN tab2
ON ((tab1.Feld1=tab2.Feld1) AND (tab1.Feld2=tab2.Feld2))
LEFT OUTER JOIN tab3
ON (tab2.Feld3=tab3.Feld3)
LEFT OUTER JOIN tab4
ON (tab1.Feld4=tab4.Feld4)
WHERE
(tab2.Feld5 IS NULL OR tab2.Feld5=100)
OR
tab3.Feld7 IS NULL
AND
(tab4.Feld6 IS NULL OR tab4.Feld6=100)
Bin mir aber nicht sicher ob es das Problem löst...................

Grüße..................
http://home.arcor.de/opencomedy/Bilder/161.jpg
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(Rene Descartes, fr. Mathematiker u. Philosoph, 1596-1650)
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 16:04
Leider löst das das Problem auch nicht.
Es zeigt sich über keine Veränderung mit oder ohne diesen Klammern.
  Mit Zitat antworten Zitat
zwaem86

Registriert seit: 4. Jul 2006
16 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 16:08
Muss das nicht vllt. so aussehen:

SQL-Code:
SELECT tab1.FeldA, tab2.FeldB, tab3.FeldC, tab4.FeldD
FROM tab1
LEFT OUTER JOIN tab2
ON ((tab1.Feld1=tab2.Feld1) AND (tab1.Feld2=tab2.Feld2)),
tab2 LEFT OUTER JOIN tab3
ON (tab2.Feld3=tab3.Feld3),
tab1 LEFT OUTER JOIN tab4
ON (tab1.Feld4=tab4.Feld4)
WHERE
(tab2.Feld5 IS NULL OR tab2.Feld5=100)
OR
tab3.Feld7 IS NULL
AND
(tab4.Feld6 IS NULL OR tab4.Feld6=100)
Das Problem iss dass ich fast aussließlich unter ORACLE programmiere. Zwar ab und zu auch unter MSSQl oder DB2(gleiche schreibweise wie in deinem Beispiel) aber da verzweifel ich auch immer an den Outer joins............und frag dann immer lieber nen Arbeitskollegen und lass ihn drüber gucken............

Güße............
http://home.arcor.de/opencomedy/Bilder/161.jpg
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(Rene Descartes, fr. Mathematiker u. Philosoph, 1596-1650)
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 16:09
Mir fällt gerade etwas noch seltsameres auf.

Wenn ich alle vier Tabellen mit JOIN verknüpfe wie beschrieben, so werden mir Nonsens-Daten angezeigt. Irgendwie sind die dargestellten Werte verrutscht. Mit verrutscht meine ich, dass die in den einzelnen Ausgabefeldern Daten aus mehreren Feldern zusammen angezeigt werden und diese z.T. noch verstümmelt. Ganz seltsam!

Entferne ich aus der Abfrage tab4, so wird alles korrekt ausgeführt und dargestellt - wie bereits erwähnt.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 16:16
@zwaem86
Das sieht auch recht sympatisch aus , aber es bringt Borlands DBoberfläche zum Absturz.

Aber ich glaube auch nicht, dass deine Variante nötig ist, da es ja auch so nur mit den drei tab1..3 klappt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 16:57
Hallo Peter,

deine WHERE Klausel sieht mir nicht ganz koscher aus. Ich würde eine AND Verknüpfung an der bezeichneten Stelle erwarten:

SQL-Code:
SELECT tab1.FeldA, tab2.FeldB, tab3.FeldC, tab4.FeldD
FROM tab4
RIGHT OUTER JOIN tab1
  ON tab1.Feld4 = tab4.Feld4
LEFT OUTER JOIN tab2
  ON tab1.Feld1 = tab2.Feld1 AND tab1.Feld2 = tab2.Feld2
LEFT OUTER JOIN tab3
  ON tab2.Feld3 = tab3.Feld3
WHERE (tab4.Feld6 IS NULL OR tab4.Feld6=100)
  AND (tab2.Feld5 IS NULL OR tab2.Feld5=100)
  AND tab3.Feld7 IS NULL /* AND statt OR ? */
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Problem mit mehrfachen JOIN

  Alt 11. Jul 2006, 16:59
Zitat von PASST:
SQL-Code:
SELECT tab1.FeldA, tab2.FeldB, tab3.FeldC, tab4.FeldD
FROM tab1
LEFT OUTER JOIN tab2 ON (tab1.Feld1=tab2.Feld1) AND (tab1.Feld2=tab2.Feld2)
LEFT OUTER JOIN tab3 ON (tab2.Feld3=tab3.Feld3)
                         ^^^^ <-- hier
LEFT OUTER JOIN tab4 ON (tab1.Feld4=tab4.Feld4)
WHERE (tab2.Feld5 IS NULL OR tab2.Feld5=100)
      OR tab3.Feld7 IS NULL
  AND (tab4.Feld6 IS NULL OR tab4.Feld6=100)
Müsste das da (^) nicht tab1 heissen?

Schonmal ohne Where-Klausel probiert?
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem mit mehrfachen JOIN

  Alt 12. Jul 2006, 08:04
Nein, das tab2 muss schon sein. Die Beziehung ist ja "tab2->tab3" und nicht "tab1->tab3". Bitte nicht verwechseln mit dem mathematischen Folgerungsschluss "A->B und B->C dann auch A->C".

Wenn ich die WHERE-Klausel weglasse, werden mir nicht alle Sätze von tab1 angezeigt. Das muss schon so sein.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Problem mit mehrfachen JOIN

  Alt 12. Jul 2006, 11:31
Hallo Peter,

wie ist deine Antwort auf die Frage AND statt OR aus Beitrag #7?

Freundliche Grüße

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:45 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