it-swarm.com.de

Wie kann ich mithilfe der IDs mehrere SQL-Tabellen verknüpfen?

Ich habe 4 verschiedene Tische, die ich verbinden möchte. Die Tabellen sind mit folgenden Spalten strukturiert:

TableA - aID | nameA | dID

TableB - bID | nameB | cID | aID

TableC - cID | nameC | date

TableD - dID | nameD

Beginnend mit Tabelle A verstehe ich, wie man Tabellen a und c mit b zusammenfügt, da b die Primärschlüssel für diese Tabellen hat. Ich möchte in der Lage sein, Tabelle TableD auf TableA außerdem zu verbinden. Unten ist meine SQL-Anweisung, die zuerst die Tabellen A und B und dann die Tabelle C verknüpft:

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now())) 

Wenn ich versuche, einen weiteren Join hinzuzufügen, um D einzuschließen, erhalte ich die Fehlermeldung, dass 'TableD' unbekannt ist:

 SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
    ON TableB.aID= TableA.aID)
    INNER JOIN TableC ON(TableB.cID= Tablec.cID)
    INNER JOIN TableA ta ON(ta.dID= TableD.dID)
    WHERE (DATE(TableC.date)=date(now())) 
135
Sun

Sie möchten etwas ähnliches:

SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
    JOIN TableB
        ON TableB.aID = TableA.aID
    JOIN TableC
        ON TableC.cID = TableB.cID
    JOIN TableD
        ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now()) 

In Ihrem Beispiel schließen Sie TableD nicht ein. Alles, was Sie tun müssen, ist eine weitere Verknüpfung durchzuführen, wie Sie es zuvor getan haben.

Ein Hinweis: Sie werden feststellen, dass ich viele Ihrer Klammern entfernt habe, da sie in den meisten Fällen nicht erforderlich sind und nur Verwirrung stiften, wenn Sie versuchen, den Code zu lesen. Eine ordnungsgemäße Verschachtelung ist der beste Weg, um Ihren Code lesbar und getrennt zu machen.

291
Justin Pihony
SELECT 
    a.nameA, /* TableA.nameA */
    d.nameD /* TableD.nameD */
FROM TableA a 
    INNER JOIN TableB b on b.aID = a.aID 
    INNER JOIN TableC c on c.cID = b.cID 
    INNER JOIN TableD d on d.dID = a.dID 
WHERE DATE(c.`date`) = CURDATE()
24
Nemoden

Sie haben sich nicht bei TableD angemeldet, sondern lediglich das TableD-Feld (dID) aus einer der Tabellen ausgewählt.

4
Chriseyre2000

Einfacher INNER JOIN VIEW-Code ....

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
2
Manu R S