J'ai 4 tables différentes que je veux rejoindre. Les tableaux sont structurés avec des colonnes comme suit:
TableA - aID | nameA | dID
TableB - bID | nameB | cID | aID
TableC - cID | nameC | date
TableD - dID | nameD
En commençant par la table A, je comprends comment joindre des tables a et c en utilisant b, puisque b a les clés primaires pour ces tables. Je veux aussi pouvoir rejoindre la table TableD sur la TableA. Ci-dessous, ma déclaration SQL qui joint les tables A et B, puis les joint à C:
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()))
Lorsque j'essaie d'ajouter une autre jointure pour inclure D, j'obtiens une erreur indiquant que "TableD" est inconnu:
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()))
Vous voulez quelque chose de plus comme ça:
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())
Dans votre exemple, vous n'incluez pas réellement TableD
. Tout ce que vous avez à faire est d’effectuer une autre jointure, comme vous l’avez fait auparavant.
Remarque: vous remarquerez que j'ai supprimé bon nombre de vos parenthèses, car elles ne sont vraiment pas nécessaires dans la plupart des cas où vous les avez eues, et ne font qu'ajouter à la confusion lorsque vous essayez de lire le code. Une imbrication correcte est le meilleur moyen de rendre votre code lisible et séparé.
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()
Vous n'avez pas rejoint TableD, vous avez simplement sélectionné le champ TableD FIELD (dID
) dans l'une des tables.
Simple 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;