SQL interno une más de dos tablas
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");
SELECT *
FROM table1
INNER JOIN table2
ON table1.primaryKey=table2.table1Id
INNER JOIN table3
ON table1.primaryKey=table3.table1Id
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.
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;
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