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

Cómo unir LEFT JOIN con RIGHT JOIN

Estas en el tema de Cómo unir LEFT JOIN con RIGHT JOIN en el foro de Mysql en Foros del Web. Estimados, tengo 2 tablas con campos letras y cantidad en la tabla1 tengo a A, B, C, D, F y en la tabla2 tengo A, ...
  #1 (permalink)  
Antiguo 17/07/2009, 13:32
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Cómo unir LEFT JOIN con RIGHT JOIN

Estimados, tengo 2 tablas con campos letras y cantidad
en la tabla1 tengo a A, B, C, D, F
y en la tabla2 tengo A, C, D, E

cada letra con un valor (cantidad)

ejemplo:

A = 5
B = 9
etc...

ahora quiero hacer una consulta de la cantidad total que tengo en cada letra, pero en tablas distintas y que me muestre el null en ambos lados.

este es el codigo que tengo:

Cita:
SELECT t1.letras, sum(t1.suma) AS 'Tabla 1', sum(t2.suma) AS 'Tabla 2'
FROM (
SELECT letras, sum(cantidad) suma
FROM tabla1 GROUP BY letras
) t1

LEFT JOIN (
SELECT letras, sum(cantidad) suma
FROM tabla2
GROUP BY letras
) t2 ON t1.letras = t2.letras

GROUP BY t1.letras
y me da esto:

//i30.tinypic.com/2dr6z4l.jpg
(agregar ustedes http: porque si no me dice SPAM ¬¬)

como ven en la tabla 1 no me muestra el null de E
y si cambio el LEFT por RIGHT me lo mostraria, pero dejaria de mostrar el null de B en la tabla 2

entonces lo que yo quiero es que me muestre todos los null, de las 2 tablas.
Cómo le hago para hacer eso? lamentablemente MySQL no soporta FULL OUTER JOIN

saludos
  #2 (permalink)  
Antiguo 17/07/2009, 13:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

Mira este interesante articulo de como simular el full join en mysql
http://www.xaprb.com/blog/2006/05/26...join-in-mysql/

Espero te sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 20/07/2009, 06:49
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

muy agradecido...
aunque no soy muy bueno en ingles XD

logré hacer que me mostrara los null de ambos lados, pero sin suma de letras, ahora tengo el siguiente codigo con suma, pero no me funka!

Cita:
SELECT letras, sum(cantidad)
FROM tabla1 GROUP BY letras
LEFT JOIN tabla2
ON tabla1.cantidad = tabla2.cantidad
UNION SELECT letras, sum (cantidad)
FROM tabla2
GROUP BY letras
RIGHT JOIN tabla2
ON tabla1.cantidad = tabla2.cantidad
help me...
qué me falta?

Última edición por Twonex; 20/07/2009 a las 08:35
  #4 (permalink)  
Antiguo 20/07/2009, 09:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

prueba así:
Código sql:
Ver original
  1. SELECT letras, SUM(cantidad)
  2. FROM tabla1
  3. LEFT JOIN tabla2
  4. ON tabla1.cantidad = tabla2.cantidad
  5. GROUP BY letras
  6. UNION
  7. SELECT letras, SUM (cantidad)
  8. FROM tabla2
  9. RIGHT JOIN tabla2
  10. ON tabla1.cantidad = tabla2.cantidad
  11. GROUP BY letras
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 20/07/2009, 09:53
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

ya lo tenia asi, pero saque los group porque pensaba pornerlos al final, la cosa es que de tenerlos asi me da error indicando que la tabla1 no es unica!
  #6 (permalink)  
Antiguo 20/07/2009, 10:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

Código sql:
Ver original
  1. (SELECT letras, SUM(cantidad)
  2. FROM tabla1
  3. LEFT JOIN tabla2
  4. ON tabla1.cantidad = tabla2.cantidad
  5. GROUP BY letras)
  6. UNION
  7. (SELECT letras, SUM (cantidad)
  8. FROM tabla2
  9. RIGHT JOIN tabla1
  10. ON tabla1.cantidad = tabla2.cantidad
  11. GROUP BY letras)

prueba asi
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 20/07/2009, 10:51
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

asi me dice que letras es ambiguo
y si cambio letras por tabla1.letras
entonces me dice qu cantidad es ambiguo
  #8 (permalink)  
Antiguo 20/07/2009, 11:03
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

vamos mas cerca con la solución.

Código sql:
Ver original
  1. (SELECT t1.letras letras1, SUM(t2.cantidad) cant1
  2. FROM tabla1 t1
  3. LEFT JOIN tabla2 t2
  4. ON t1.cantidad = t2.cantidad
  5. GROUP BY t1.letras)
  6. UNION
  7. (SELECT t1.letras, SUM (t2.cantidad) cant2
  8. FROM tabla2 t2
  9. RIGHT JOIN tabla1 t1
  10. ON t1.cantidad = t2.cantidad
  11. GROUP BY t1.letras)

La cosa es que no tengo como probarlo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 20/07/2009, 12:49
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

por lo menos ahora funciona, no da error, pero no es lo que quiero, ya que solo me esta mostrando como resultado las letras (y me las muestra todas, no las sumas de A, B, etc juntas) y me muestra solo cant1 y yo necesito cant1 y cant2 (las sumas por separado).

ahora estoy metiendo un codigo de suma que tenia antes, cuando si sumaba pero no mostraba los null XD
  #10 (permalink)  
Antiguo 20/07/2009, 13:17
 
Fecha de Ingreso: julio-2009
Ubicación: .mysql_error ( XD )
Mensajes: 554
Antigüedad: 14 años, 9 meses
Puntos: 13
Respuesta: Cómo unir LEFT JOIN con RIGHT JOIN

genere este codigo que me hacia la suma anterior, pero ahora me da problemas con los alias

Cita:
(SELECT t1.letras, SUM(t1.suma) AS Cant1, SUM(t2.suma) AS Cant2 FROM (SELECT letras, SUM(cantidad) suma FROM tabla1 t1 GROUP BY letras) LEFT JOIN tabla1 t1 ON t1.letras = t2.letras) UNION (SELECT t2.letras, SUM(cantidad) suma FROM tabla2 t2 GROUP BY letras) RIGHT JOIN tabla2 t2 ON t2.letras = t1.letras GROUP BY t1.letras)

el error es:
Cita:
#1248 - Every derived table must have its own alias
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 03:46.