Ver Mensaje Individual
  #9 (permalink)  
Antiguo 18/11/2011, 14:23
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: como unir dos consultas

Hola de nuevo:

Tal vez deberías haber comenzado por investigar un poco cómo funciona el unión no crees??? el error es bastante típico y estoy seguro que hubieras dado con la respuesta en GOOGLE o en cualquier otro buscador, ojo con eso.

Una de las condiciones de las uniones es que las consultas deben regresar el mismo número de campos y cada columna debe corresponder en tipo y longitud con su par, cuando los nombres de las columnas son iguales no hay problema, pone ese mismo nombre de columna en la tabla resultante, pero ¿Qué pasa cuando el nombre no es igual?...

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (id INT, descripcion VARCHAR(10), cantidad INT);
  2. Query OK, 0 rows affected (0.13 sec)
  3.  
  4. mysql> INSERT INTO tabla1 VALUES (1, 'uno', 10), (2, 'dos', 20);
  5. Query OK, 2 rows affected (0.06 sec)
  6. Records: 2  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM tabla1;
  9. +------+-------------+----------+
  10. | id   | descripcion | cantidad |
  11. +------+-------------+----------+
  12. |    1 | uno         |       10 |
  13. |    2 | dos         |       20 |
  14. +------+-------------+----------+
  15. 2 rows in set (0.00 sec)
  16.  
  17. mysql> CREATE TABLE tabla2 (id INT, otra_descripcion VARCHAR(10), cantidad INT);
  18.  
  19. Query OK, 0 rows affected (0.09 sec)
  20.  
  21. mysql> INSERT INTO tabla2 VALUES  (2, 'dos', 15), (3, 'tres', 25);
  22. Query OK, 2 rows affected (0.02 sec)
  23. Records: 2  Duplicates: 0  Warnings: 0
  24.  
  25. mysql> SELECT * FROM tabla2;
  26. +------+------------------+----------+
  27. | id   | otra_descripcion | cantidad |
  28. +------+------------------+----------+
  29. |    2 | dos              |       15 |
  30. |    3 | tres             |       25 |
  31. +------+------------------+----------+
  32. 2 rows in set (0.02 sec)
  33.  
  34. mysql> SELECT * FROM tabla1
  35.     -> UNION ALL
  36.     -> SELECT * FROM tabla2;
  37. +------+-------------+----------+
  38. | id   | descripcion | cantidad |
  39. +------+-------------+----------+
  40. |    1 | uno         |       10 |
  41. |    2 | dos         |       20 |
  42. |    2 | dos         |       15 |
  43. |    3 | tres        |       25 |
  44. +------+-------------+----------+
  45. 4 rows in set (0.00 sec)

Observa que en la primer tabla el segundo campo se llama DESCRIPCION mientras que en la segunda se llama OTRA_DESCRIPCION. La tabla resultante TOMA EL NOMBRE DE LA PRIMER TABLA, por lo tanto si hago referencia al campo OTRA_DESCRIPCION marcará el error que te aparece.

Código MySQL:
Ver original
  1. mysql> select * from
  2.     -> (SELECT * FROM tabla1
  3.     -> UNION ALL
  4.     -> SELECT * FROM tabla2) T order by T.otra_descripcion;
  5. ERROR 1054 (42S22): Unknown column 'T.otra_descripcion' in 'order clause'

Cómo solucionas esto? bueno, pues asignarle EL MISMO ALIAS A LAS DOS PARTES DE LA CONSULTA. Checa cómo se están uniendo tus campos_

Código MySQL:
Ver original
  1. +--------------------------------+--------------------------------+----------+
  2. | campo1                         | campo2                         | campo3   |
  3. +--------------------------------+--------------------------------+----------+
  4. | NVENTASD.CVE_SUC               | REMD.NO_REM                    | ERROR    |
  5. | NVENTASD.NO_FAC                | REMD.SUC_REM AS ho             | ERROR    |
  6. | NVENTASD.CSE_PROD AS clase     | REMD.CSE_PROD AS clase         | CORRECTO |
  7. | NVENTASD.CVE_PROD AS clave     | REMD.CVE_PROD AS clave         | CORRECTO |
  8. | NVENTASD.UNIDAD                | REMD.UNIDAD                    | CORRECTO |
  9. | NVENTASD.CANT_SURT             | REMD.CANT_SURT                 | CORRECTO |
  10. | NVENTASD.VALOR_PROD            | REMD.VALOR_PROD                | CORRECTO |
  11. | NVENTASD.SUBT_PROD             | REMD.SUBT_PROD                 | CORRECTO |
  12. | PRODUCTO.DESC_PROD AS descripc | PRODUCTO.DESC_PROD AS descripc | CORRECTO |
  13. | NVENTASC.STATUS_FAC            | REMC.STATUS_REM                | ERROR    |
  14. | NVENTASC.FALTA_FAC             | REMC.FALTA_REM                 | ERROR    |
  15. | NVENTASC.CVE_SUC               | REMC.SUC_REM                   | ERROR    |
  16. +--------------------------------+--------------------------------+----------+

En todos los campos marcados como error asignales un alias igual.

Saludos
Leo.