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

[SOLUCIONADO] usar CASE o UNION

Estas en el tema de usar CASE o UNION en el foro de Bases de Datos General en Foros del Web. Buena noche a todos!! Tengo una duda mas de performance que de sintaxis. Mi duda en cuestión es, en que momento usar CASE y en ...
  #1 (permalink)  
Antiguo 15/06/2015, 19:43
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Información usar CASE o UNION

Buena noche a todos!!

Tengo una duda mas de performance que de sintaxis.

Mi duda en cuestión es, en que momento usar CASE y en que momento usar UNION.

La duda surge ya que tengo una QUERY el cual una columna seria calculada por medio del CASE o en su defecto usar UNION.

no me decido porque al usar CASE tendría que hacer dos LEFT JOIN de mas, y valorar mas de tres campos en el CASE para hacer la operación con una u otra tabla (no es como losejemplos que he encontrado que solo compara una columna y pone una leyenda por lo genera)

En el caso de usar UNION usaría 3 QUERYS y tres JOIN en diferente query y cada JOIN tendría su condición.

Espero me puedan decir que es lo mas eficiente o en que momento conviene mas usar un UNION que un CASE.

De antemano muchas gracias!!!!
  #2 (permalink)  
Antiguo 16/06/2015, 05:16
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: usar CASE o UNION

Tendrías que postear las consultas para entender mejor la comparación, de todos modos, lo importante a comparar son los planes de ejecución.

¿Qué RDBMS estás usando?

Saludos
  #3 (permalink)  
Antiguo 16/06/2015, 05:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: usar CASE o UNION

La pregunta de matanga es importante. Las clausulas CASE no funcionan exactamente de la misma forma y con las mismas restricciones en todos los DBMS. E incluso en ciertos de ellos no son una forma optimizada de realizar ciertas acciones como las que describes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/06/2015, 10:32
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: usar CASE o UNION

Muchas gracias matanga y gnzsoloyo por contestar.

Uso SYBASE 15.0 y el query es el siguiente y lo explico.

En la primer columna de los dos primeros querys es un campo calculado que cambia dependiendo el filtro z.campo_va

en el tercer query cambia totalmenete el campo calculado y los siguientes campos a trar, aparte de que es un join con otra tabla.


Código SQL:
Ver original
  1. SELECT
  2.     (t.campo4 * d.SUB * z.campo) AS alias ,t.campo1....t.campoN
  3. FROM tabla1 d,      
  4.             tabla2 t,      
  5.             tabla3 z    
  6.         WHERE d.campo1 >= @filtro AND d.campo2 <= @filtro AND d.campo3 <> "MEX"      
  7.             AND d.campo3 = t.campo3 AND d.campo1 = t.campo1 AND d.campo4 = z.campo3 AND z.campo_va = "nu_suby"
  8. UNION    
  9.     SELECT        
  10.     (t.campo4 * d.SUB2 * z.campo) AS alias ,t.campo1....t.campoN
  11.     FROM tabla1 d,      
  12.             tabla2 t,      
  13.             tabla3 z    
  14.         WHERE d.campo1 >= @filtro AND d.campo2 <= @filtro AND d.campo3 <> "MEX"      
  15.             AND d.campo3 = t.campo3 AND d.campo1 = t.campo1 AND d.campo4 = z.campo3 AND z.campo_va = "nu_suby2"
  16. UNION
  17. SELECT
  18.     (d.otrocampo * y.cierre * 10)alias ,y.campo1...campoN
  19. FROM tabla1 d,      
  20.             tabla5 y    
  21.         WHERE d.campo1 >= @filtro AND d.campo2 <= @filtro AND d.campo3 = "MEX"      
  22.             AND d.fe_con_ope = y.fe_publi AND d.campo4 LIKE "EURO%" AND y.clave = "CURNCY"


No se que tan viable es ocupar en este caso CASE ya que todo quedaría en una sentencia pero usaríamos LEFT JOIN en lugar de JOIN ya que apra cada caso se usarían varias condiciones y las tablas son de millones de registros.

Si no me di a entender espero me digan para poder explicarlo de otra forma.

De antemano muchas gracias!

Última edición por calakra; 16/06/2015 a las 10:38
  #5 (permalink)  
Antiguo 17/06/2015, 09:57
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: usar CASE o UNION

Sería muy especulativo decir que una consulta va a ser más eficiente que la otra sin ver los planes de ejecución. La única cosa que te puedo recomendar a simple vista es que te asegures de necesitar un UNION en vez de un UNION ALL, ya que el UNION quita los registros diferentes y para esto se tiene que ordenar y comparar los registros de cada una de las subconsultas.

Saludos
  #6 (permalink)  
Antiguo 17/06/2015, 12:16
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: usar CASE o UNION

Muchas gracias matanga!!!!

Y si tienes razón, se me paso poner el all.

Etiquetas: case, performance, union
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 05:19.