mysql - tablas - unir dos consultas sql misma tabla
¿Cómo puedo unirme a múltiples tablas SQL usando los ID? (4)
Tengo 4 mesas diferentes a las que quiero unirme. Las tablas están estructuradas con columnas de la siguiente manera:
TableA - aID | nameA | dID
TableB - bID | nameB | cID | aID
TableC - cID | nameC | date
TableD - dID | nameD
Comenzando con la Tabla A, entiendo cómo UNIR las tablas a y c usando b, ya que b tiene las Claves Primarias para esas tablas. También quiero unir mesa TableD en TableA. Debajo está mi declaración de SQL que primero une las tablas A y B, luego une eso a 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()))
Cuando intento agregar otra combinación, para incluir D, aparece un error que dice que ''TableD'' es desconocido:
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()))
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;
No se ha unido a TABLED simplemente ha seleccionado el CAMPO TABLED de una de las tablas.
Quieres algo más como esto:
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())
En su ejemplo, en realidad no incluye TableD
. Todo lo que tienes que hacer es realizar otra unión como lo hiciste antes.
Una nota: notarás que eliminé muchos de tus paréntesis, ya que en realidad no son necesarios en la mayoría de los casos que los tenías, y solo añades confusión cuando intento leer el código. La anidación correcta es la mejor manera de hacer que su código sea legible y separado.
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()