Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   composicion externa mysql (http://www.forosdelweb.com/f86/composicion-externa-mysql-503019/)

mmarti 04/07/2007 22:10

composicion externa mysql
 
Hola a todos. Quisiera saber si alguien me puede ayudar con una consulta. Aclaro que no tengo muy en claro el tema de left join, right outer join......
En fin mi problema es que me estan faltando algunos datos en el resultado de la consulta. Tengo lo siguiente:
- Tabla EMPRESAS, CODPOSTAL
- Empresas tiene dos campos, CPREAL, CPLEGAL con los cuales emparejo con la tabla CODPOSTAL
- Cree una vista v_empresas para que me los datos de la empresa y localidad y provincia.
- La vista es asi
CREATE OR REPLACE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_empresas` AS select -datosvariosdeempresa- ` from (`empresas` left join `codpostal` on(((`empresas`.`cp` = `codpostal`.`cp`) and (`empresas`.`cpreal` = `codpostal`.`cp`))))

pero me muestra null en los campos localidad y provincia que son datos de la tabla codpostal.

Por favor, aunque sea una ayudita agradeceré muchisimo. Saludos:'(

axz 17/07/2007 20:00

Re: composicion externa mysql
 
Guau .... pues por principio de cuentas creo que tienes varios paréntesis que marean un poco y me da la impresión de que tienes una ligera inconsistencia ... pues estas relacionando el campo codpostal.cp con 2 campos; empresas.cp y empresas.cpreal ... supongo que esa es la razón por la que tu vista está arrojando nulls.

Si estoy entendiendo bien tu planteamiento ... tu solución sería algo como esto (solo la parte del query, el resto es integrarlo en la construcción de la vista):
Código:

SELECT -datosvariosdeempresa-
FROM empresas e
LEFT JOIN codpostal c
ON e.cp = c.cp
AND e.cpreal = c.NOMBRE_DEL_CAMPO_PARA_CPREAL

creo que con eso debe de funcionar, si no funciona dime y lo arreglamos
... suerte :arriba:

mmarti 18/07/2007 05:32

Re: composicion externa mysql
 
Hola. Gracias por tu respuesta. A ver si te entendí, sería algo así?

SELECT -datosvariosdeempresa-
FROM empresas e
LEFT JOIN codpostal c
ON e.cp = c.cp
AND e.cpreal = c.cp

Los dos campos (e.cp y e.cpreal) estan relacionados con c.cp que es la que tiene (codigopostal, localidad, provincia)

Saludos !!:arriba:

axz 18/07/2007 09:15

Re: composicion externa mysql
 
Ah, bien, pero entonces ... solo preguntar ¿vale la pena relacionar ambos? o es posible que en tu e.cp y e.cpreal tengas datos distintos? ... esto es por performance ... porque si tienen siempre datos los 2 campos y en ambos tienes siempre lo mismo valdría la pena eliminar uno tanto de la tabla como del join, con lo que te quedaría
Código:

SELECT -datosvariosdeempresa-
FROM empresas e
LEFT JOIN codpostal c
ON e.cp = c.cp

de otra forma si crees que no sobran, es correcto lo que dices ...
Suerte con eso :-D

mmarti 18/07/2007 14:50

Re: composicion externa mysql
 
Hola nuevamente. El tema es que son dos datos distintos. Uno es el CodPostal de la dirección real y el otro es el CodPostal de la dirección legal. Posiblemente en algun momento coincidan, pero muchas veces van a ser distintos CodPostal. Se Entiende? Por ejemplo el domicilio legal es Buenos Aires y el domicilio real es Cordoba. Como me quedaría la consulta? Nuevamente, muchas gracias por tus respuestas.

axz 18/07/2007 15:07

Re: composicion externa mysql
 
Bien, siendo así ningún campo sobra. La pregunta ahora es ... en algún momento muestras datos de la tabla codpostal? ... si no los muestras y estas usando LEFT JOIN ... dicho join no te sirve ...

En este caso los nulls que te está mostrando es porque en los campos codpostal y/o cp hay algún valor que no existe en codpostal.cp ... si quieres evitar los nulls tienes que usar INNER JOIN ... y entonces te quedaría así ...
Código:

SELECT -datosvariosdeempresa-
FROM empresas e
INNER JOIN codpostal c
ON e.cp = c.cp

Pero OJO ... acá solo estoy mostrando los datos que coinciden con empresas.cp

Ojalá te haya aclarado las cosas :arriba:

mmarti 27/07/2007 23:42

Re: composicion externa mysql
 
Hola de nuevo. Ya me estoy abusando de tu paciencia con tantas preguntas. La cuestión es que necesito mostrar en un formulario también los valores nulos.
Mis tablas.......
Empresas: codigo, nombre, direccionlegal, cplegal, direccionReal, cpReal, masdatosdeempresa....
CodPostal: codigo, localidad, provincia

Saludos!!! y muchas :arriba: gracias

axz 30/07/2007 10:34

Re: composicion externa mysql
 
mmarti, no te preocupes, para eso estamos!

Para mostrar también los valores nulos entonces tendrías que usar LEFT JOIN.

Código:

SELECT e.cp, c.cp, e.cpreal, -datosvariosdeempresa-
FROM empresas e
LEFT JOIN codpostal c
ON e.cp = c.cp
AND e.cpreal = c.cp

En este caso, la consulta te mostraría todos los registros que tengan el mismo valor en empresas.cp y empresas.cpreal, ahora ojo con los campos que muestras, pues si muestras los de empresas es posible que se te muestren null, en cambio si muestras los de codpostal no se mostrarán en null, por eso mostré en un principio los 3 campos ...

Suerte y saludos :arriba:

mmarti 02/08/2007 05:25

Re: composicion externa mysql
 
Muchísimas gracias por tu ayuda. Probé con lo último que me mandaste y funcionó bárbaro. Muchas gracias Master. :arriba: :arriba: :arriba: :arriba:

axz 02/08/2007 17:24

Re: composicion externa mysql
 
Excelente, qué bueno que te sirvió ... aunque me falta muchísimo para ser master, pero gracias ...

Muchos saludos y suerte por allá :arriba:


La zona horaria es GMT -6. Ahora son las 20:34.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.