Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Ansi Join syntax (https://www.delphipraxis.net/166452-ansi-join-syntax.html)

p80286 14. Feb 2012 12:29

Datenbank: (oracle) • Version: 9,10 • Zugriff über: egal

Ansi Join syntax
 
Hallo zusammen,
aus aktuellem Anlass beschäftige ich mich mit den Ansi Joins. Irgendwie schaffe ich es nicht da eine vernünftige Unterlage zu finden.
Sobald es etwas über inner Join hinausgeht hüllen alle Internet-Seiten und Handbücher in Schweigen

Code:
Select ...
From T1,T2,T3,T4
where T1.key=T2.Key
  and T1.Key=T3.Key(+)
  and T3.Key=T4.Key(+)
  and T1.Wert like 'Copper%'
wie setze ich dies in Ansi Joins um?

Code:
Select ...
From T1
     Join T2 on (T1.Key=T2.Key)
left Join T3 on (T1.Key=T3.Key)
left Join T4 on (T3.Key=T4.Key)
where T1.Wert like 'Copper%'
Und wie macht man es hiermit?

Code:
select ...
from T1,(select MyKey from T2 where T2.Wert=0) T2
where T1.Key=T2.Mykey
Code:
select ...
from T1
     Join (select MyKey from T2 where T2.Wert=0) T2 on (T1.Key=T2.Mykey)
Gruß
K-H

Codewalker 14. Feb 2012 12:37

AW: Ansi Join syntax
 
Code:
(+)
ist eine Oracle Kurzschreibweise für einen OUTER JOIN (in deinem Fall also ein RIGHT OUTER JOIN). Man kann das aber immer nur auf eine Seite der Zuweisung schreiben (also nicht einen FULL OUTER JOIN abbilden, indem man
Code:
and T1.Key(+) = T3.Key(+)
schreiben würde).

grenni999 14. Feb 2012 13:33

AW: Ansi Join syntax
 
Hi!

Also ungetestet könnte es so aussehen:

Code:
SELECT *
FROM
  T1
  INNER JOIN T2 ON(T1.key=T2.Key)
  RIGHT JOIN T3 ON(T1.key=T3.Key),
  T3
  RIGHT JOIN T4 ON(T3.Key=T4.Key)
WHERE
  T1.Wert like 'Copper%'
Code:
SELECT *
FROM
  T1 INNER JOIN T2 ON (T1.Key=T2.Mykey)
 WHERE
   T2.Wert = 0

Iwo Asnet 14. Feb 2012 13:59

AW: Ansi Join syntax
 
Ich würde das T3 auf der einen Zeile noch rausschmeissen
Code:
SELECT *
FROM
  T1
  INNER JOIN T2 ON(T1.key=T2.Key)
  RIGHT JOIN T3 ON(T1.key=T3.Key)
  RIGHT JOIN T4 ON(T3.Key=T4.Key)
WHERE
  T1.Wert like 'Copper%'
Zitat:

Zitat von p80286 (Beitrag 1151003)
Und wie macht man es hiermit?
Code:
select ...
from T1,(select MyKey from T2 where T2.Wert=0) T2
where T1.Key=T2.Mykey

Code:
select T1, t2.MyKey
  from T1 join (select MyKey from T2 where T2.Wert=0) T2 on t1.key= t2.mykey
Das Konstrukt
Code:
select * from t1,t2,t3 where t1.ID = t2....
kann bei Verwendung des Gleichheitsoperators übrigens zu Fehlern führen, und ist somit nicht 100% äquivalent zu einem Join. Das liegt an der Auswertereihenfolge.

p80286 14. Feb 2012 14:27

AW: Ansi Join syntax
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1151024)
Ich würde das T3 auf der einen Zeile noch rausschmeissen
Code:
SELECT *
FROM
  T1
  INNER JOIN T2 ON(T1.key=T2.Key)
  RIGHT JOIN T3 ON(T1.key=T3.Key),
  RIGHT JOIN T4 ON(T3.Key=T4.Key)
WHERE
  T1.Wert like 'Copper%'

Warum? da seh ich wenigstens worauf der Join sich bezieht (T3 und T4)
Ich finde grennies Version sieht seltsam aus aber verleitet nicht zu Mißverständnissen?

Zitat:

Zitat von grenni999 (Beitrag 1151017)

Code:
SELECT *
FROM
  T1
  INNER JOIN T2 ON(T1.key=T2.Key)
  RIGHT JOIN T3 ON(T1.key=T3.Key),
  T3
  RIGHT JOIN T4 ON(T3.Key=T4.Key)
WHERE
  T1.Wert like 'Copper%'

oder hab ich da etwas falsch verstanden?

Gruß
K-H

Iwo Asnet 14. Feb 2012 16:01

AW: Ansi Join syntax
 
Kommas haben in einer JOIN-Klausel nichts verloren, auch mein Beispiel war falsch (ein Komma zuviel)


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf