2012-03-24 42 views
127

Tengo 4 tablas diferentes a las que quiero unirme. Las mesas están estructurados con las columnas de la siguiente manera:¿Cómo puedo unir varias tablas SQL usando los ID?

TableA - aID | nameA | dID 

TableB - bID | nameB | cID | aID 

TableC - cID | nameC | date 

TableD - dID | nameD 

A partir de la Tabla A, entiendo cómo unirse a los cuadros A y C utilizando b, ya que b tiene las claves principales para esas tablas. También quiero unir mesa TableD en TableA. A continuación es mi instrucción SQL que primero se une a los cuadros A y B, luego se une que en 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, me sale un error que 'presentó' es desconocida:

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())) 

Respuesta

268

quieres algo más a 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, usted no está realmente incluyes TableD. Todo lo que tienes que hacer es realizar otra unión como lo hiciste antes.

Nota: notará que eliminé muchos de sus paréntesis, ya que en realidad no son necesarios en la mayoría de los casos en que los tenía, y solo agrega 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.

+2

no seleccionará tableN. * Duplicar todos los emparejan primarias de claves de identificación en las etiquetas de las columnas? (la pregunta no especificó qué salida se desea, pero generalmente no querría hacer esto, creo) –

+2

¿Puedo preguntar por qué 'JOINTableC' es' ON' 'TableC.cID = TableB.cID' y no' TableC.cID = TableA.cID'. Supuse que estamos uniendo 'TableA' a las otras 3 tablas. – emihir0

4

No se ha unido a TABLED simplemente ha seleccionado el CAMPO TABLED de una de las tablas.

20
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() 
1

simple INNER JOIN código de la vista ....

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

¿No está utilizando la estructura de tabla de OP? –

Cuestiones relacionadas