Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi sQL Join ?? wie gehts? (https://www.delphipraxis.net/110620-sql-join-wie-gehts.html)

SQLNoop 20. Mär 2008 21:23

Datenbank: M$ Acc$$ • Zugriff über: direkt oder ado

sQL Join ?? wie gehts?
 
moin moin,

danke erstmal dass ich hier posten darf, ich hab nämlich 'n mittelmässiges problem, bin mir aber sicher ihr könnt mir bei helfen :-)

also, gegeben sind drei tabellen

T1 (@T1ID, blabla)
T2 (@T2ID, blabla)
L(@T1ID, @T2ID)

wobei @ 'n schlüssel anzeigt.

jetzt möchte ich 'ne einfache liste erzeugen ...

wo alle datensätze in T1 angezeigt werden und diese nach T2, blabla sortiert werden...

dachte mir, das ging irgendwie so ....

SQL-Code:
select t1.blabla, t2,blabla from
t1 left join L on T1.T1ID = L.T1ID
Inner join T2 on L.T2ID = T2.T2ID
order by T2.blabla
nur das mag er nicht... weiss jemand wie das geht? müsst eigentlich eine standartabfrage sein, wenn ich mich nicht irre ...

herzlichen dank

euer SQLNoop

mkinzler 20. Mär 2008 21:33

Re: sQL Join ?? wie gehts?
 
SQL-Code:
select
    t1.blabla, t2.blabla
from
     L
         join t1 on t1.t1id = l.t1id
         join t2 on t2.t1id = l.t2id
order by
     T2.blabla;

SQLNoop 20. Mär 2008 21:42

Re: sQL Join ?? wie gehts?
 
einen schönen abend mkinzler,

ich habe deine SQL Abfrage mal eingegeben, da bringt er mir die meldung syntaxfehler in from klausel ... was hab ich da falsch gemacht?

im übrigen, sollte die lösung mit mehreren Lx dateien funktionierne, wobei immer alle T1 sätze angezeigt werden sollten...

vielen dank
euer SQLNoop

mkinzler 20. Mär 2008 21:45

Re: sQL Join ?? wie gehts?
 
Versuch mal
SQL-Code:
select
    t1.blabla, t2.blabla
from
     L
         inner join t1 on t1.t1id = l.t1id
         inner join t2 on t2.t2id = l.t2id
order by
     T2.blabla;

SQLNoop 20. Mär 2008 22:11

Re: sQL Join ?? wie gehts?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo MKinzler,

danke für die hilfe, jetzt bringt er die meldung, fehlender abfrageoperator ..

ich häng mal die beispiel db hinten an...

ausserdem sollte es schon 'n outer join sein, da noch mehr link tabellen zukommen können und die grundgesamtheit der tabelle T1 ausgewiesen werden sollte...

dank und gruss
der SQLNoop

sx2008 21. Mär 2008 05:43

Re: sQL Join ?? wie gehts?
 
Bei Access muss man Klammern setzen um die Reihenfolge der Joins festzulegen.
Delphi-Quellcode:
select
    t1.*, t2.blabla
from
  (t1 LEFT OUTER JOIN l ON t1.t1id = l.t1id)
  LEFT OUTER JOIN t2 ON t2.T2id = l.t2id
order by T2.blabla;

SQLNoop 21. Mär 2008 07:46

Re: sQL Join ?? wie gehts?
 
guten morgen SX2008

wunderbar es funktioniert... nur das statement kapiere ich nicht :?

SQL-Code:
select
    t1.*, t2.blabla
from
  (t1 LEFT OUTER JOIN l ON t1.t1id = l.t1id)
  LEFT OUTER JOIN t2 ON t2.T2id = l.t2id //hier weshalb kein inner join?
order by T2.blabla;
das mit den klammern setzten hab ich ja auch schon probiert... tja hat halt nie geklappt mit dem inner join ... dass man hier 'n left join setzen muss statt 'n inner join ... auf das wär ich nie gekommen ...

gibts eine erklärung für dieses phänomen?

viele grüsse an den kalten und regnerischen feiertag
SQLNoop

sx2008 21. Mär 2008 21:22

Re: sQL Join ?? wie gehts?
 
Zitat:

Zitat von SQLNoop
wunderbar es funktioniert... nur das statement kapiere ich nicht :?

Na das ist nicht so schwer.
Wenn man schreibt:
SQL-Code:
TabA LEFT OUTER JOIN TabB ON TabA.IdFeld1=TabB.IdFeld1
dann bekommt am ALLE Datensätze von TabA verknüpt mit den Datensätzen von TabB.
Falls in TabB kein passender Datensatz, dann sind die Felder von Tab = NULL.
Das ist übrigens das Gleiche wie:
SQL-Code:
TabB RIGHT OUTER JOIN TabA ON TabA.IdFeld1=TabB.IdFeld1
Ich verwende immer LEFT Outer Join, dass finde ich leichter nachzuvollziehen.

Nachdem wir TabA und TabB verjoined haben, kommt eine dritte Tabelle ins Spiel
SQL-Code:
(TabA LEFT OUTER JOIN TabB ON TabA.IdFeld1=TabB.IdFeld1)
LEFT OUTER JOIN TabC ON TabB.IdFeld2 = TabC.IdFeld2
Das heisst also bei Joins werden immer 2 Tabellen verknüpft; kommt eine weitere Tabelle hinzu,
wird das bisherige Ergebnis geklammert (nur bei Access!) und man "joind" die 3. Tabelle hinzu.

Die Klammersetzung ist nur bei Access notwendig; andere DBMS sind intelligenter und ermitteln die optimale Verknüpfungsreihenfolge selber.
Es macht durchaus einen Unterschied in welcher Reihenfolge man Tabellen verknüpt.
Das End-Ergebnis bleibt gleich,aber die Zwischenergebnisse unterscheiden sich - es gibt eine optimale Reihenfolge, bei der die Speicherbelastung am gringsten ist.


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