Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/04/2014, 07:20
lolo435
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: ¿Como funciona realmente UNION?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Primero: No repitas la información que ya pusiste en el post anterior. Sólo suma texto sin aportar nada nuevo. Trata de poner lo relevante sin copiar y pegar.

Vamos al punto:

En primer lugar, aparentemente estas confundiendo el "sumar registros" con "sumar datos". y no es lo mismo.
UNION lo que hace es sumar los registros obtenidos en la primera consulta a los registros obtenidos de la segunda, pero no suma los datos. Solo encadena el primer conjunto con el segundo, descartando todos aquellos registros donde todos y cada uno de los datos de cada una de las columnas sean exactamente iguales.
Esto último quiere decir que hace un DISTINCT para el registro entero considerado como un solo objeto.
¿Se entiende?
UNION jamás suma datos, para eso existen las funciones agregadas, más exactamente en este caso, SUM(), que se aplica sobre la columna a sumar.


UNION es, entonces, la representación de una operación de conjuntos (¿recuerdas Teoría de Conjuntos y diagramas de Venn?), donde es A + (B-A) = R

Ahora bien, eso sería el resultado de esto:
Código MySQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla1
  3. SELECT a, b, c, d
  4. FROM tabla2
Pero luego estás haciendo un GROUP BY, y ese GROUP BY se ejecuta sobre la tabla resultante o derivada de ese UNION. Y es allí donde se descartan competamente los resultados de los registros de ese UNION, dejando sólo el primer registro por cada grupo indicado. Pero es allí donde debes sumarlo:

Código MySQL:
Ver original
  1. SELECT a, b, c, SUM(d) d
  2. FROM (SELECT a, b, c, d
  3.   FROM tabla1
  4.   SELECT a, b, c, d
  5.   FROM tabla2) T3
  6. GROUP BY a, b, c
Allí sí se suma el campo "d" devuelto en el UNION.

Ahora bien, si se deben tomar todos los datos de las dos tablas unidas, sin descartar los que tienen valores iguales entre registros, lo que corresponde es usar UNION ALL, y no UNION:
Código MySQL:
Ver original
  1. SELECT a, b, c, SUM(d) d
  2. FROM (SELECT a, b, c, d
  3.   FROM tabla1
  4.   SELECT a, b, c, d
  5.   FROM tabla2) T3
  6. GROUP BY a, b, c

Nota: Todo esto sale perfectamente explicado en el manual de referencia. Deberías usarlo.


Ya ya, si se que union no suma nada, eso lo hago yo. A lo que me refiero es que union une las dos tablas y dependiendo si es all o no, muestra todos los registros o solo lo que no estan duplicados. En mi caso, he usado solo union, supongo que internamente une las dos tablas, y como el select hace la suma, pues se muestra la suma.



volviendo a lo del principio, si union solo muestra los no duplicados, xq cuando hago

consulta1

union

consulta2

los registros de consulta 1 machacan a los de cosulta 2? aquellos donde colum 1---colum2-----colum3 son iguales, pero column4 es distinto ( decir que agrupo por kas 3 primeras columnas, no se si eso tiene algo que ver) y xq se sobrescribe los registros de la prmera consulta en la segunda y no alrreves?