![]() |
[SQL] Hilfe bei Verknüpfung zweier Tabellen
Hallo,
ich muss mich leider mit einem nicht-Delphi Thema an euch wenden. Ich helfe momentan bei einer Internetseite aus und muss mich dort mit PHP und einer mysql-Datenbank rumschlagen, obwohl das nicht mein Spezialgebiet ist :) Daher hoffe ich, dass ihr mir helfen könnt. Die Grundlagen habe ich soweit alle verstanden und eigentlich klappt auch alles ganz gut, nur an einer Stelle komme ich nicht weiter. Es geht um folgendes: Ich habe zwei Tabellen: Tabelle1: uid - gid Tabelle2: uid - name - punkte - etc.. Es sind also zwei Tabellen, in denen jeweils die Spalte uid (User-ID) gleich ist. Momentan frage ich Daten aus Tabelle2 so ab:
SQL-Code:
Jetzt möchte ich aber, dass nur die Datensätze ausgewählt werden, bei denen dem User eine bestimmte gid zugeordnet ist.
SELECT * FROM Tabelle2
Soll quasi so aussehen: (mir ist klar, dass es so leider nicht geht :( )
SQL-Code:
Wie kann man denn die beiden Tabellen miteinander verknüpfen, dass die Abfrage richtig ist? Ich Blick da leider nicht ganz durch und hoffe auf eure Hilfe :)
SELECT * FROM Tabelle2 WHERE gid = 1
Vielen Dank im Voraus |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Du benötigst einen
![]() |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Entweder ("alte" Syntax):
SQL-Code:
oder
SELECT T1.*, T2.*
FROM Tabelle1 T1, Tabelle2 T2 WHERE T2.uid = T1.uid AND T1.gid = 1
SQL-Code:
SELECT T1.*, T2.*
FROM Tabelle1 T1 JOIN Tabelle2 T2 ON T2.uid = T1.uid WHERE T1.gid = 1 |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Vielen Dank, habs gestern noch mit dem INNER JOIN hinbekommen
Was bedeutet das alte Syntax bei deiner anderen Lösung? Geht die auch, aber stilistisch ist die andere besser? Und wenn ja, wer bestimmt, was stilistisch schöner ist? :) |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Die neue Syntax finde ich wesentlich schöner.
Alt und neu funktionieren bezogen auf den EQUI-JOIN in allen Datenbanken. Nur der OUTER-JOIN funktioniert in der alten Syntax nur in Oracle (Plus-Operator) sonst leider nicht. Deshalb würde ich immer die neue Variante verwenden und mir dort auch nur den LEFT-JOIN merken, der RIGHT-JOIN ist überflüssig. |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Man kann bei den expliziten Joins viel genauer steuern wie verknüpft wird. Implizit geht ja nur ein INNER JOIN ( Ausnahme Oracle, wie omata schon geschrieben hat)
Zitat:
|
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Zitat:
Edit: Man kann sich das Leben natürlich auch schwerer machen, und beide verschachtelt benutzen (siehe Access) |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Es könnte aber ein Fall audtreten, wo man es benötigt.
Es ist wie mit While vs Repeat..Until, man kann das meiste mit einer Schleifenart lösen. |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Zitat:
SQL-Code:
ein
... FROM a LEFT OUTER JOIN b ...
SQL-Code:
mache, dann hab ich ja quasi auch nen RIGHT-JOIN :wink:
... FROM b LEFT OUTER JOIN a ...
BTW: Bislang bin ich auch ganz gut ohne RIGHT-JOINs augekommen 8) |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Also wenn ich auf die Schnelle eine Query aus diversen Tabellen zusammentippe, passiert es mir einfach, das ich irgendwann ein RIGHT JOIN brauche. Ich könnte zwar die Logik umdrehen, und von vorne anfangen, um puristisch auf das RIGHT JOIN zu verzichten, aber Zeit ist Geld und so gehts eben.
Nööööötig issses nicht, aber der Vollständigkeit halber vorhanden und praktisch. |
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 |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Ich finde explizite Joins richtig eingerückt aber übersichtlicher
|
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Zitat:
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 |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Was ist den an
SQL-Code:
unübersichtlich?
select
T1.*, T2.* FROM Tabelle1 T1 join Tabelle2 T2 on T2.uid = T1.uid WHERE T1.gid = 1; |
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:
das obere Beispiel hat Access generiert da bin ich unschuldig!
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 Was mich z.B. stört
SQL-Code:
Da wird eine Tabelle (VTP_TABPAY) mit zwei anderen Tabellen (VTP_TABDOS,VTP_TABBRE) verbunden. erst im "Nachsatz" lese ich, daß die Verbindung über
(VTP_TABDOS INNER JOIN VTP_TABBRE ......) INNER JOIN VTP_TABPAY ON ....
SQL-Code:
erfolgt.
VTP_TABBRE.IDEPAY = VTP_TABPAY.IDEPAY
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 |
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; |
Re: [SQL] Hilfe bei Verknüpfung zweier Tabellen
Zitat:
Nur, bei den Beispielen fällt es schwer eine andere Syntax zu akzeptieren.
SQL-Code:
könnte man dies in eine solche Allgemeinform überführen:
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;
SQL-Code:
und um NULL-Werte zu beachten
...
FROM tabelle1 JOIN tabelle2 ON tabelle2.spa = tabellex.spy JOIN tabelle3 ON tabelle3.spa = ... ...
SQL-Code:
Gruß
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 K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
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