AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi sQL Join ?? wie gehts?
Thema durchsuchen
Ansicht
Themen-Optionen

sQL Join ?? wie gehts?

Ein Thema von SQLNoop · begonnen am 20. Mär 2008 · letzter Beitrag vom 21. Mär 2008
Antwort Antwort
SQLNoop

Registriert seit: 20. Mär 2008
4 Beiträge
 
#1

sQL Join ?? wie gehts?

  Alt 20. Mär 2008, 22:23
Datenbank: M$ Acc$$ • Zugriff über: direkt oder ado
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: sQL Join ?? wie gehts?

  Alt 20. Mär 2008, 22:33
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;
Markus Kinzler
  Mit Zitat antworten Zitat
SQLNoop

Registriert seit: 20. Mär 2008
4 Beiträge
 
#3

Re: sQL Join ?? wie gehts?

  Alt 20. Mär 2008, 22:42
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: sQL Join ?? wie gehts?

  Alt 20. Mär 2008, 22:45
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;
Markus Kinzler
  Mit Zitat antworten Zitat
SQLNoop

Registriert seit: 20. Mär 2008
4 Beiträge
 
#5

Re: sQL Join ?? wie gehts?

  Alt 20. Mär 2008, 23:11
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
Angehängte Dateien
Dateityp: zip db_149.zip (8,3 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: sQL Join ?? wie gehts?

  Alt 21. Mär 2008, 06:43
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;
  Mit Zitat antworten Zitat
SQLNoop

Registriert seit: 20. Mär 2008
4 Beiträge
 
#7

Re: sQL Join ?? wie gehts?

  Alt 21. Mär 2008, 08:46
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: sQL Join ?? wie gehts?

  Alt 21. Mär 2008, 22:22
Zitat von SQLNoop:
wunderbar es funktioniert... nur das statement kapiere ich nicht
Na das ist nicht so schwer.
Wenn man schreibt:
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:
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.
  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 12:22 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