Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Eingeschobener Join (https://www.delphipraxis.net/166446-eingeschobener-join.html)

Win32.API 15. Feb 2012 10:04

AW: Eingeschobener Join
 
Ihr habt Recht, ich habe einen kleinen Tippfehler gemacht:

SQL-Code:
select * from A a
    left join B b
        (
            join C c on c.key = b.key
          --join C c on c.key = a.key
        )
    on b.key = a.key;
@Iwo Asnet: Danke für die Erklärung mit der Mengenlehre, mit der Explizit hingeschriebenen Klammer wird dies auch sofort deutlich.

Jumpy 15. Feb 2012 10:17

AW: Eingeschobener Join
 
Ist denn ein Join dasselbe wie ein Left Join?
Wenn nicht, wage ich mal zu behaupten, das die Ergebnismenge nicht gleich sein muss, wie bei der Version mit den zwei Left Joins, da die eingeschobene Variante evtl. weniger zurückliefert als nur B.

Kann aber auch sein, dass ich da gerade zusehr um die Ecke denke

DeddyH 15. Feb 2012 10:25

AW: Eingeschobener Join
 
Zitat:

Zitat von Jumpy (Beitrag 1151148)
Ist denn ein Join dasselbe wie ein Left Join?

Nein, JOIN ist die verkürzte Syntax für INNER JOIN, LEFT JOIN die Kurzform von LEFT OUTER JOIN.

jobo 15. Feb 2012 10:27

AW: Eingeschobener Join
 
Nein, es ist nicht das gleiche.

http://psoug.org/definition/JOIN.htm
http://psoug.org/reference/joins.html

Jumpy 15. Feb 2012 10:52

AW: Eingeschobener Join
 
Mein ich doch. Dann müsste doch auch meine These Stimmen, dass:
SQL-Code:
select * from A a
    left join B b
        (
            join C c on c.key = b.key
          --join C c on c.key = a.key
        )
    on b.key = a.key;
nicht zwingend dasselbe Ergebnis liefert wie

SQL-Code:
select * from A a
left join B b on b.key = a.key
left join C c on c.key = a.key;
Das zweite liefert alles von A und dazu alles von B was zu A passt und dazu alles von C was zu A passt.

Das erste liefert alles von A und dazu alles von B und C, wo C zu B passt.
Dadurch könnten doch zuvor schon zu A passende Daten von B verloren gehen, da sie nicht zu C passen.

Iwo Asnet 15. Feb 2012 11:00

AW: Eingeschobener Join
 
Code:
select * from A a
    left join
(B b join C c on c.key = b.key)
    on b.key = a.key;

A = 1,2,3
B = 3,4,5
C = 2,6,7

bc = B join C = ()
A left join bc = (1-x-x, 2-x-x, 3-x-x)

select * from A a
left join B b on b.key = a.key
left join C c on c.key = a.key;

ab = A left join B = (1-x,2-x,3-3)
ab left join C = (1-x-x, 2-x-2, 3-3-x)
Getippt und nicht getestet (bin kein RDMBS)
Die Anzahl der Zeilen ist die Gleiche, aber nicht der Inhalt der Zeilen.


Zitat:

Zitat von Win32.API (Beitrag 1151143)
SQL-Code:
select * from A a
    left join (
          B b join C c on c.key = b.key
        )
    on b.key = a.key;
@Iwo Asnet: Danke für die Erklärung mit der Mengenlehre, mit der Explizit hingeschriebenen Klammer wird dies auch sofort deutlich.

Keine Ursache, aber richtig abschreiben musste schon ;-) (Klammer war falsch)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Seite 2 von 2     12   

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