Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [SQL] Hilfe bei Verknüpfung zweier Tabellen (https://www.delphipraxis.net/138162-%5Bsql%5D-hilfe-bei-verknuepfung-zweier-tabellen.html)

p80286 6. Aug 2009 12:40

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Also ich bevorzuge die "alte" Syntax (jo, Oracelaner),
wenn ich diese joins sehe, die ACCESS erstellt (ich weiß, ACCESS ist nicht satisfaktionsfähig) dann hab ich immer das Gefühl einen Basic-Source mit ganz vielen gotos vor mir zu haben.

funktioniert, aber undurchschaubar.

Gruß
K-H

mkinzler 6. Aug 2009 12:48

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Ich finde explizite Joins richtig eingerückt aber übersichtlicher

khh 6. Aug 2009 12:49

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Zitat:

Zitat von p80286
Also ich bevorzuge die "alte" Syntax (jo, Oracelaner),
wenn ich diese joins sehe, die ACCESS erstellt (ich weiß, ACCESS ist nicht satisfaktionsfähig) dann hab ich immer das Gefühl einen Basic-Source mit ganz vielen gotos vor mir zu haben.

funktioniert, aber undurchschaubar.

Gruß
K-H

ich hänge mich hier auch noch dran :-)
wobei
anstatt
SELECT T1.*, T2.* ...

select *
FROM Tabelle1 T1, Tabelle2 T2
WHERE T2.uid = T1.uid
AND T1.gid = 1

ja ausreichen ist.
ich finde diese "alte" Syntax liest sich irgendwie besser, und ich gebs zu ich hab auch bei oracle gelernt ;-)

Gruss KH

mkinzler 6. Aug 2009 12:55

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Was ist den an

SQL-Code:
select
    T1.*,
    T2.*
FROM
    Tabelle1 T1 
        join Tabelle2 T2 on T2.uid = T1.uid
WHERE
    T1.gid = 1;
unübersichtlich?

p80286 6. Aug 2009 16:15

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Okay, brechen wir einen Glaubenskrieg vom Zaun!!

SQL-Code:
SELECT VTP_TABDOS.CODDOS, VTP_TABBRE.IDEPAY, VTP_TABEVE.CODEVE, VTP_TABSUI.DATECH
FROM (((VTP_TABDOS INNER JOIN VTP_TABBRE ON VTP_TABDOS.IDEDOS = VTP_TABBRE.IDEDOS) INNER JOIN VTP_TABPAY ON VTP_TABBRE.IDEPAY = VTP_TABPAY.IDEPAY) INNER JOIN VTP_TABSUI ON VTP_TABBRE.IDEBRE = VTP_TABSUI.IDEDOS) INNER JOIN VTP_TABEVE ON VTP_TABSUI.IDEECH = VTP_TABEVE.IDEEVE;
SQL-Code:
SELECT VTP_TABDOS.CODDOS, VTP_TABBRE.IDEPAY, VTP_TABEVE.CODEVE, VTP_TABSUI.DATECH
FROM VTP_TABDOS,
     VTP_TABBRE,
     VTP_TABPAY,
     VTP_TABSUI,
     VTP_TABEVE
WHERE VTP_TABDOS.IDEDOS = VTP_TABBRE.IDEDOS
  and VTP_TABBRE.IDEPAY = VTP_TABPAY.IDEPAY
  and VTP_TABBRE.IDEBRE = VTP_TABSUI.IDEDOS
  and VTP_TABSUI.IDEECH = VTP_TABEVE.IDEEVE
das obere Beispiel hat Access generiert da bin ich unschuldig!
Was mich z.B. stört
SQL-Code:
(VTP_TABDOS INNER JOIN VTP_TABBRE ......) INNER JOIN VTP_TABPAY ON ....
Da wird eine Tabelle (VTP_TABPAY) mit zwei anderen Tabellen (VTP_TABDOS,VTP_TABBRE) verbunden. erst im "Nachsatz" lese ich, daß die Verbindung über
SQL-Code:
VTP_TABBRE.IDEPAY = VTP_TABPAY.IDEPAY
erfolgt.

In der unteren Version erscheint mir das einfacher zu überblicken, da pro Zeile immer nur zwei Tabellen miteinander verbunden werden, insbesonders wenn noch ein paar Tabellen dazu kommen.

Was gegen die "alte" Version spricht, ist die Vermengung von "Tabellenverbindungen" und "Wertabfragen". Wenn man da eine Fremdabfrage in die Finger bekommt ist es mit der Übersichtlichkeit schnell dahin.

Für die "alte" Version spricht die (meiner Meinung nach) einfache Auskommentierbarkeit wenn z.b. eine Tabelle hinzu kommen soll oder entfernt werden soll .

Gruß
K-H

mkinzler 6. Aug 2009 17:44

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Nur weil der Code den Access erzeugt suboptimal und unübersichtlich ist würde ich nicht die Syntax verdammen.

SQL-Code:
SELECT
    VTP_TABDOS.CODDOS, VTP_TABBRE.IDEPAY, VTP_TABEVE.CODEVE, VTP_TABSUI.DATECH
FROM
    VTP_TABDOS
        join VTP_TABBRE on VTP_TABBRE.IDEDOS = VTP_TABDOS.IDEDOS
            join VTP_TABSUI on VTP_TABSUI.IDEDOS = VTP_TABBRE.IDEBRE
                join join VTP_TABEVE on VTP_TABEVE.IDEEVE = VTP_TABSUI.IDEECH
            join VTP_TABPAY on VTP_TABPAY.IDEPAY = VTP_TABBRE.IDEPAY;

p80286 7. Aug 2009 12:39

Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
 
Zitat:

Zitat von mkinzler
Nur weil der Code den Access erzeugt suboptimal und unübersichtlich ist würde ich nicht die Syntax verdammen.

ist zwar ein alter Hut, aber was war ist ...

Nur, bei den Beispielen fällt es schwer eine andere Syntax zu akzeptieren.

SQL-Code:
SELECT
    VTP_TABDOS.CODDOS, VTP_TABBRE.IDEPAY, VTP_TABEVE.CODEVE, VTP_TABSUI.DATECH
FROM
    VTP_TABDOS
        join VTP_TABBRE on VTP_TABBRE.IDEDOS = VTP_TABDOS.IDEDOS
            join VTP_TABSUI on VTP_TABSUI.IDEDOS = VTP_TABBRE.IDEBRE
                join join VTP_TABEVE on VTP_TABEVE.IDEEVE = VTP_TABSUI.IDEECH
            join VTP_TABPAY on VTP_TABPAY.IDEPAY = VTP_TABBRE.IDEPAY;
könnte man dies in eine solche Allgemeinform überführen:

SQL-Code:
...
FROM tabelle1
     JOIN tabelle2 ON tabelle2.spa = tabellex.spy
     JOIN tabelle3 ON tabelle3.spa = ...
...
und um NULL-Werte zu beachten


SQL-Code:
FROM Tabelle1,Tabelle2,Tabelle3
WHERE Tabelle1.id0 = Tabelle2.id0
  AND Tabelle1.ID1 = Tabelle3.id1(+)


FROM Tabelle1
     JOIN Tabelle2 ON Tabelle1.id0 = Tabelle2.id0
     LEFT JOIN Tabelle3 ON Tabelle3.id1=Tabelle1.id1
oder
     RIGHT JOIN Tabelle3 ON Tabelle1.id1 = Tabelle3.id1
Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 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-2025 by Thomas Breitkreuz