AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ansi Join syntax

Ein Thema von p80286 · begonnen am 14. Feb 2012 · letzter Beitrag vom 14. Feb 2012
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Ansi Join syntax

  Alt 14. Feb 2012, 11:29
Datenbank: (oracle) • Version: 9,10 • Zugriff über: egal
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Ansi Join syntax

  Alt 14. Feb 2012, 11:37
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).
  Mit Zitat antworten Zitat
grenni999

Registriert seit: 17. Apr 2008
7 Beiträge
 
#3

AW: Ansi Join syntax

  Alt 14. Feb 2012, 12:33
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
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

AW: Ansi Join syntax

  Alt 14. Feb 2012, 12:59
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%'
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.

Geändert von Iwo Asnet (14. Feb 2012 um 15:01 Uhr) Grund: Komma im ersten Query korrigiert (entfernt)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Ansi Join syntax

  Alt 14. Feb 2012, 13:27
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?


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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#6

AW: Ansi Join syntax

  Alt 14. Feb 2012, 15:01
Kommas haben in einer JOIN-Klausel nichts verloren, auch mein Beispiel war falsch (ein Komma zuviel)
  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 15:09 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