Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/04/2015, 14:23
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: es posible usar subconsulta en lugar de UNION

Hola marenas4001:

No se si entendí correctamente el problema, pero creo que la confusión viene en entender como funciona la cláusula WHERE en el UNION.

Veamos este ejercicio para ver si es más o menos lo que quieres, supongamos que tienes estas dos tablas:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    1 | one         |
  16. |    2 | two         |
  17. |    3 | three       |
  18. +------+-------------+
  19. 3 rows in set (0.00 sec)

tal como lo comento gnzsoloyo, UNION nos sirve para encadenar resultados, es decir, si quieres obtener por ejemplo lo los elementos con ID = 1 de ambas tablas, podrías hacer esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, descripcion FROM tabla1
  2.     -> UNION
  3.     -> SELECT id, descripcion FROM tabla2 WHERE id = 1;
  4. +------+-------------+
  5. | id   | descripcion |
  6. +------+-------------+
  7. |    1 | uno         |
  8. |    2 | dos         |
  9. |    3 | tres        |
  10. |    1 | one         |
  11. +------+-------------+
  12. 4 rows in set (0.00 sec)

¿qué paso entonces? que el filtro WHERE sólo afecta a la segunda parte de la consulta... en tu caso mencionas que quieres filtrar por el campo ENTITY, sin embargo este campo SÓLO EXISTE EN LA SEGUNDA PARTE DEL UNION

Aquí tendrías dos opciones, una sería agregar un FILTRO EN AMBAS CONSULTAS, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT id, descripcion FROM tabla1 WHERE id = 1
  2.     -> UNION
  3.     -> SELECT id, descripcion FROM tabla2 WHERE id = 1;
  4. +------+-------------+
  5. | id   | descripcion |
  6. +------+-------------+
  7. |    1 | uno         |
  8. |    1 | one         |
  9. +------+-------------+
  10. 2 rows in set (0.00 sec)

o en su defecto, hacer primero la UNION y después filtrar el resultado con una subconsulta, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM
  2.     -> ( SELECT id, descripcion FROM tabla1
  3.     ->   UNION
  4.     ->   SELECT id, descripcion FROM tabla2
  5.     -> ) T
  6.     -> WHERE id = 1;
  7. +------+-------------+
  8. | id   | descripcion |
  9. +------+-------------+
  10. |    1 | uno         |
  11. |    1 | one         |
  12. +------+-------------+
  13. 2 rows in set (0.00 sec)

No sé si esto es lo que necesitas, haz la prueba y nos comentas.

Saludos
Leo.