Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [SQL] Outer Join (https://www.delphipraxis.net/145216-%5Bsql%5D-outer-join.html)

Synollus 26. Dez 2009 16:44


[SQL] Outer Join
 
Hi,

ich habe Folgendes vor: Ich möchte alle Zeilen in Tabelle A selektieren, deren ID nicht in Tabelle B vorkommen, ein "Verbinden" der Tabellen ist nicht nötig

Dennoch dachte ich mir, dass FULL OUTER JOIN dafür wie geschaffen wäre, aber nachdem ich diesen Artikel gelesen habe, bin ich total verwirrt (vielleicht habe ich es auch nur falsch verstanden).

Was bleibt mir denn jetzt noch übrig? :?

mkinzler 26. Dez 2009 16:54

Re: [SQL] Outer Join
 
In einem Outer join sind alle vorhanden ( left, right, full)
Nur die ohne bekommst du besser über einen Subselect

alzaimar 26. Dez 2009 18:40

Re: [SQL] Outer Join
 
SQL-Code:
select a.* 
  from tabelle1 a left join
       tabelle2 b on a.PK = b.FK
 where b.FK is null
liefert alle Datensätze aus Tabelle1, deren PK nicht in der Spalte 'FK' der Tabelle2 enthalten ist.

Synollus 27. Dez 2009 09:13

Re: [SQL] Outer Join
 
Danke euch beiden. Auf die Idee mit dem Subselect bin ich nicht gekommen. :wall:

Welche von beiden Varianten ist jetzt die effizientere oder nehmen sie sich nicht viel?

mkinzler 27. Dez 2009 09:15

Re: [SQL] Outer Join
 
Das kommt auf das DBMS an.

Synollus 27. Dez 2009 16:17

Re: [SQL] Outer Join
 
Das DBMS dürfte MySQL sein, wenn ich die Begriffe nicht verwechsel, oder meinst du die Engine à la InnoDB oder MyISAM?

Niko 27. Dez 2009 16:29

Re: [SQL] Outer Join
 
Ohne die Interna von MySQL zu kennen, sollte es keinen großen Unterschied geben, da der Optimierer die Subquery wohl zunächst in einen Join auflösen wird. Sonst hilft nur ausprobieren, wobei du das immer noch machen kannst, wenn sich herausstellt, dass dein Programm zu langsam ist.

omata 27. Dez 2009 18:39

Re: [SQL] Outer Join
 
So und jetzt nochmal, wie man das normalerweise lösen würde...
SQL-Code:
SELECT *
FROM tabelle1 a
WHERE NOT EXISTS (SELECT *
                  FROM tabelle2 
                  WHERE FK = a.PK)

alzaimar 27. Dez 2009 21:37

Re: [SQL] Outer Join
 
Zitat:

Zitat von omata
So und jetzt nochmal, wie man das normalerweise lösen würde...

Äh... nö? Die Lösung mit einem LEFT JOIN ist doch mindestens gleichwertig (siehe u.a. "Inside SQL-Server xxxxx", Soukup und Delaney).

omata 27. Dez 2009 23:34

Re: [SQL] Outer Join
 
Das mag ja sein, es ist aber trotzdem ein Hack und somit nur gefrickel. Ich setzt es auch manchmal ein, aber es geht nunmal nichts über kommulierte Unterabfragen (in diesem benötigten Bereich).


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

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