Comment puis-je joindre plusieurs tables SQL à l’aide des identifiants?

J’ai 4 tables différentes que je veux rejoindre. Les tables sont structurées avec des colonnes comme suit:

TableA - aID | nameA | dID TableB - bID | nameB | cID | aID TableC - cID | nameC | date TableD - dID | nameD 

À partir de la table A, je comprends comment joindre les tables a et c à l’aide de b, car b possède les clés primaires pour ces tables. Je veux aussi pouvoir rejoindre la table TableD sur TableA. Ci-dessous se trouve mon instruction SQL qui joint d’abord les tables A et B, puis joint cela à 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’append une autre jointure, d’inclure D, je reçois 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 TableD pas réellement TableD . Tout ce que vous avez à faire est d’effectuer une autre jointure comme vous l’avez fait auparavant.

Une note: vous remarquerez que j’ai supprimé beaucoup de parenthèses, car elles ne sont pas vraiment nécessaires dans la plupart des cas, et ne font que créer de 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 simplement choisi le FIELD TABLED de l’un des tableaux.

Code simple INNER JOIN VIEW ….

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