SQL interno une más de dos tablas

Resuelto Ben Pearce asked hace 11 años • 10 respuestas

Actualmente puedo consultar la unión de dos tablas sobre la igualdad de una clave externa/primaria de la siguiente manera.

 $result = mysql_query("SELECT * FROM `table1` 
                         INNER JOIN 
                       `table2` ON table1.primaryKey=table2.table1Id");

Me gustaría extender esto a varias tablas (todas con las mismas claves externas). Estoy probando el siguiente código que no devuelve nada. ¿Alguien puede señalar qué estoy haciendo mal?

 $result = mysql_query("SELECT * FROM `table1` 
                        INNER JOIN `table2` 
                        INNER JOIN table3 
                        ON table1.primaryKey=table2.table1Id=table3.table1Id");
Ben Pearce avatar Feb 21 '13 12:02 Ben Pearce
Aceptado
SELECT * 
FROM table1 
INNER JOIN table2
      ON table1.primaryKey=table2.table1Id
INNER JOIN table3
      ON table1.primaryKey=table3.table1Id
Alex avatar Feb 21 '2013 05:02 Alex

A continuación se muestra una sintaxis general de consulta SQL para unir tres o más tablas. Esta consulta SQL debería funcionar en todas las bases de datos de relaciones principales, por ejemplo, MySQL, Oracle, Microsoft SQLServer, Sybase y PostgreSQL:

SELECT t1.col, t3.col FROM table1 join table2 ON table1.primarykey = table2.foreignkey
                                  join table3 ON table2.primarykey = table3.foreignkey

Primero unimos la tabla 1 y la tabla 2, que producen una tabla temporal con datos combinados de la tabla 1 y la tabla 2, que luego se une a la tabla 3. Esta fórmula se puede extender a más de 3 tablas hasta N tablas. Solo debe asegurarse de que la consulta SQL tenga una declaración de unión N-1 para poder unir N tablas. Por ejemplo, para unir dos tablas necesitamos 1 declaración de unión y para unir 3 tablas necesitamos 2 declaraciones de unión.

Harjeet Jadeja avatar Feb 21 '2013 05:02 Harjeet Jadeja
SELECT eb.n_EmpId,
   em.s_EmpName,
   deg.s_DesignationName,
   dm.s_DeptName
FROM tbl_EmployeeMaster em
 INNER JOIN tbl_DesignationMaster deg ON em.n_DesignationId=deg.n_DesignationId
 INNER JOIN tbl_DepartmentMaster dm ON dm.n_DeptId = em.n_DepartmentId
 INNER JOIN tbl_EmployeeBranch eb ON eb.n_BranchId = em.n_BranchId;
ravindra kalambe avatar Oct 04 '2017 13:10 ravindra kalambe

Una posible solución:

SELECT Company.Company_Id,Company.Company_Name,
    Invoice_Details.Invoice_No, Product_Details.Price
  FROM Company inner join Invoice_Details
    ON Company.Company_Id=Invoice_Details.Company_Id
 INNER JOIN Product_Details
        ON Invoice_Details.Invoice_No= Product_Details.Invoice_No
 WHERE Price='60000';

-- pruebas de cambios

vikramrajc avatar Dec 17 '2013 14:12 vikramrajc