Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

aprendiendo a usar los join.

Estas en el tema de aprendiendo a usar los join. en el foro de Mysql en Foros del Web. Hola estoy aprendiendo a como usar los joins, tanto los inner join, left join, right join, etc. Estoy siguiendo el libro la biblia de mysql ...
  #1 (permalink)  
Antiguo 10/12/2009, 07:49
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 3 meses
Puntos: 4
Pregunta aprendiendo a usar los join.

Hola estoy aprendiendo a como usar los joins, tanto los inner join, left join, right join, etc.

Estoy siguiendo el libro la biblia de mysql 4.0 y ahi existe una consulta de la siguiente maner:
Código mysql:
Ver original
  1. Select c.first_name,c.surname,s.value
  2. from sales s left join customer c on  s.id=c.id;

Yo estoy intentando optener el mismo resultado con:
Código mysql:
Ver original
  1. select concat(c.first_name,' ',c.surname) as 'Cliente',s.value as 'Compra', concat(sr.first_name,' ',sr.surname)
  2. from (sales s inner join sales_rep sr left join customer c on (c.id=s.id) on (sr.employee_number=c.code);

Pero no me funciona, la consulta tiede que devolver algo como esta imagen:

http : // img191.imageshack.us/img191/1257/capturac.png

EN el segundo ejemplo se tendria que agregar a la imagen los nombres del vendedor.
  #2 (permalink)  
Antiguo 10/12/2009, 08:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: aprendiendo a usar los join.

Si estás usando MySQL 5.x, no uses manuales viejos... Tienen montones de bugs y problemas que ya se han resuelto y allí no aparecen.

Prueba:

Código sql:
Ver original
  1. SELECT
  2.     CONCAT(c.first_name,' ',c.surname) Cliente,
  3.     s.VALUE Compra,
  4.     CONCAT(sr.first_name,' ',sr.surname)
  5. FROM sales s
  6.     LEFT JOIN customer c ON c.id = s.id
  7.     INNER JOIN sales_rep sr ON sr.employee_number = c.code;

En los JOIN, el orden de los factores si altera el producto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/12/2009, 08:14
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 1 mes
Puntos: 25
Respuesta: aprendiendo a usar los join.

no uses '' usa simplemente As Cliente
__________________
Hospedaje Web al mejor costo!
  #4 (permalink)  
Antiguo 10/12/2009, 08:24
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: aprendiendo a usar los join.

Ok, no usare las comillas..

gnzsoloyo gracias, pero la consulta no me funciona, tengo un dato que es nulo y con la consulta que me has proporcionado no funciona y hay un error mio en un enlace, asi es como tengo el codigo:

Código mysql:
Ver original
  1.     CONCAT(c.first_name,' ',c.surname) Cliente,
  2.     s.value Compra,
  3.     CONCAT(sr.first_name,' ',sr.surname) Empleados
  4. FROM sales s
  5.     LEFT JOIN customer c ON c.id = s.id
  6.     INNER JOIN sales_rep sr ON sr.employee_number = s.code;

En cuanto al manual, no entontre otro a parte de ese :( y el manual de referencia que es muy complejo porque uno no sabe por donde comenzar. Si saben de alguno me ayudarian mucho.
  #5 (permalink)  
Antiguo 10/12/2009, 09:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: aprendiendo a usar los join.

Si tienes un valor usado como clave en NULL, tienes un problema de defición de tablas o bien no estás usando tablas InnoDB sino MyISAM y no estás validando los datos entrantes.
En todo caso, tu esquema debería responder a esto:
Cita:
1. Una venta pertenece a un cliente, por lo que debe llevar la clave del cliente.
2. Una venta es realizada por un un empleado, por lo que debe llevar el id del empleado
Si esto se cumple, no debería haber ventas que no tuviesen los dos campos, y por tanto esta consulta debería devolver los datos correctamente:
Código sql:
Ver original
  1. SELECT
  2.     CONCAT(c.first_name,' ',c.surname) Cliente,
  3.     s.VALUE Compra,
  4.     CONCAT(sr.first_name,' ',sr.surname)
  5. FROM sales s
  6.     INNER JOIN  sales_rep sr ON s.code = sr.employee_number
  7.     INNER JOIN customer c ON s.id = c.id;
Esto si y sólo si sales.code corresponde al identificador del vendedor, y sales.id al del cliente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:11.