2012-04-21 11 views
12

que estoy usando esta consulta:consulta MySQL para unirse a tres mesas

SELECT a.sales_id, d.bus_title, a.cat_id 
FROM tbl_sales a 
INNER JOIN tb_category b ON a.cat_id = b.cat_id 
INNER JOIN tbl_business d ON d.bus_id = a.bus_id 

que produce este resultado:

sales_id | bus_title  |cat_id 
----------|----------------|------------ 
1  | Business 1  | 6 
2  | Business 12 | 12 
3  | Business 123 | 25 

he cambiado el cat_id campo en una tabla nueva llamada tb_sales_category que contiene los campos sales_category_id , sales_id, cat_id. ¿Cómo puedo escribir la nueva consulta al unirme también a esta tabla para obtener el mismo resultado que el anterior?

Soy algo nuevo en las bases de datos, necesito ayuda. Gracias de antemano

Respuesta

12

Prueba esto:

SELECT a.sales_id, d.bus_title, s.cat_id 
FROM tbl_sales a 
INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id 
INNER JOIN tbl_business  d ON a.bus_id = d.bus_id 
INNER JOIN tb_category  b ON s.cat_id = b.cat_id 

La idea es bastante simple, el primer campo en la nueva tabla de tb_sales_category que es sales_category_id está trabajando como sustituta clave, no tiene nada que ver con el relaciones entre las otras dos tablas. Luego llegamos a los otros dos campos que son sales_id, cat_id, estos lo que debe asignar a los otros dos lados de las relaciones.

No se puede Join tb_category b ON a.cat_id = b.cat_id en el nuevo esquema de lástima pues ya no tenemos a.cat_id, y aquí viene el nuevo rol de mesa tb_sales_category, insertándolo con dos lados de unión, uno con INNER JOIN tb_category b ON s.cat_id = b.cat_id y el otro con INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id que debe hacerse.

Espero que esto tenga sentido.

+1

Esto también funciona bien, gracias –

+1

también gracias por la explicación, esto me ayudará en mi auto proceso de aprendizaje –

3

No soy un gran fan de combinaciones internas a fin de tratar esto:

SELECT a.sales_id, a.cat_id, c.bus_title 
FROM tb_sales_category a, tb_sales b, tbl_business c 
WHERE a.sales_id = b.sales_id 
AND b.bus_id = c.bus_id 
+2

¿Por qué en la tierra de Don ¿Te gusta INNER JOINs? – liquorvicar

+0

@ gimg1 Gracias, eso sirve para el propósito –