Comunidad de diseño web y desarrollo en internet online

Optimizar una consulta Sql

Citar            
MensajeEscrito el 11 May 2009 01:31 am
Tengo que unir 4 tablas, ellas son tbl_operaciones, tbl_empresas, tbl_sucursales, tbl_ciudades. El problema me surge ya que en la tbl_operaciones tengo las columnas (ideviante, idreceptor, idfactura).- Tengo que mostrar todos los datos de una operacion, pero tendria que tendria que conectar con tbl_empresas, tbl_sucursales, tbl_ciudades 3 veces segidas.

Para que se entienda mejor doy un ejemplo

Código :

tbl_operaciones
ideviante   idreceptor   idfactura    origen   destino   …
tbl_empresas
idempresa   nombre   …
tbl_sucursales
idempresa   idsucursal   direccion   idciudad   fonos   matriz   …
tbl_ciudades
idciudad   nombre   país   area


Para optener los datos de operaciones tengo que unir en tres ocaciones colas tablas, ya que necesito saber quien (envía,recibe y factura) con sus respectivos datos como casa matriz y ciudad.
Actualmente tengo hecho esto

Código :

Select * 
FROM operaciones OP

INNER JOIN tbl_empresas TEE ON OP. Ideviante= TEE. Idempresa
INNER JOIN tbl_ sucursales SE ON SE. idempresa = TEE. Idempresa
INNER JOIN tbl_ ciudades CE ON CE. Ideviante= SE. Idciudad
INNER JOIN tbl_empresas TER ON OP. Ideviante= TER. Idempresa
INNER JOIN tbl_ sucursales SR ON SR. idempresa = TER. Idempresa
INNER JOIN tbl_ ciudades CR ON CR. Ideviante= SR. Idciudad
INNER JOIN tbl_empresas TEF ON OP. Ideviante= TEF. Idempresa
INNER JOIN tbl_ sucursales SF ON SF. idempresa = TEF. Idempresa
INNER JOIN tbl_ ciudades CF ON CF. Ideviante= SF. idciudad


Alguien sabe si hay alguna otra manera, para poder optimizar esta consulta, y no volver a tener que enlazar la tabla tantas veces.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 11 May 2009 02:46 am
select t1.d1, t1,d2, t2.d1, t2.d2.... etc
from
(
select d1, d2
from ( tablas )
where ( condicion )
) as t1,
(
select d1, d2
from ( tablas )
where ( condicion )
) as t2,
where
{condicion}

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 11 May 2009 04:06 am
¿por que la mismas tablas las unes mas de 1 ves ?? (de echo 3)

¿los campos que unen cada tabla son indices?

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 11 May 2009 06:13 pm
tambien puedes hacer seleccion especifica de los campos para acelerar la carga de archivos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 13 May 2009 03:38 am
Primero, muchas gracias por las respuestas.-

jpcw escribió:

select t1.d1, t1,d2, t2.d1, t2.d2.... etc
from
(
select d1, d2
from ( tablas )
where ( condicion )
) as t1,
(
select d1, d2
from ( tablas )
where ( condicion )
) as t2,
where
{condicion}

Por lo que tengo entendido de estas manera es menos eficas que la que estoy usando, por ello no es recomendable.-
De echo, realize unas pruebas y tengo una diferencia de 0.005 sobre el tiempo que manejaba.-

Inyaka escribió:

¿por que la mismas tablas las unes mas de 1 ves ?? (de echo 3)

¿los campos que unen cada tabla son indices?


Correcto, tengo una tabla en la que estan registradas todas las empresas, y en la tabla Operacion intervienen tres empresas. Las que pueden ser las 3 distintas ò 2 iguales y 1 distinta.-
Bueno tambien necesito saber la direccion de la casa matriz de cada una de las empresas que intervienen.-
Y no encuentro otra manera aun :S.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 13 May 2009 03:40 am

talcual escribió:

tambien puedes hacer seleccion especifica de los campos para acelerar la carga de archivos


Si lo tengo hecho asi, lo omiti para no poner tanto codigo .
Gracias.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 13 May 2009 04:07 am
entonces ruedala saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 13 May 2009 04:14 am

york3rs escribió:


Correcto, tengo una tabla en la que están registradas todas las empresas, y en la tabla Operacion intervienen tres empresas. Las que pueden ser las 3 distintas ò 2 iguales y 1 distinta.-
Bueno también necesito saber la direccion de la casa matriz de cada una de las empresas que intervienen.-
Y no encuentro otra manera aun :S.-


las tablas se unen una sola ves luego solo usas esa unión, además no es recomendable hacer

Código MySQL :

SELECT *

siempre pon los campos que vas a seleccionar, pues si traes todos los datos obviamente la consulta demorara mas. el hacer eso solo es bueno para cuando estas desarrollando, pero no para producción. Además si escribes los campos entenderé mejor la consulta.

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 20 May 2009 12:00 am

Código :

Select
OP.numero,
OP.nro_bultos
TEE.nombre,
TER.nombre,
TEF.nombre
FROM operaciones OP
INNER JOIN tbl_empresas TEE ON OP. Ideviante= TEE. Idempresa
INNER JOIN tbl_empresas TER ON OP. Idrecepciona = TER. Idempresa
INNER JOIN tbl_empresas TEF ON OP. Idfactura = TEF. Idempresa


Esta es parte de al consulta, pero si soluciono esto soluciono todo.- Tengo la tbl operaciones, en al que intervienen 1ó 2 empresas distintas, siendo una la que envia la mercadaria, otra que la recibe, y la ultima que es la que paga el envio de la mercaderia. La operacion es el hecho de traslado de mercaderia.- Yo necesito obtener todos los datos de la operacion.-
Ahora para obtener los datos de las empresas enlazo 3 veces con la tabla tbl_empresas y quiero ver si se puede que la enlaze solamente una vez.-

Ojala quede mas claro.-:S

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.