Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/03/2010, 09:04
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ayuda como eliminar una columna de una consulta

Me parece que te estás complicando innecesariamente.
Salvo que vayas a usar la tabla devuelta por la consulta "cruda", para algo, esa tabla la vas a visualizar en una aplicación (web o de escritorio). Entonces la aparición o no de la columna es algo que debes resolver en la aplicación. No en la consulta.
De esa forma el problema se simplificaría, y no necesitarías hacer un método dinámico, que por otro lado no puedes implementar en el servidor.
Además de eso, yo no le veo practicidad a que te devuelva un valor NULL en una columna, ya que las aplicaciones suelen tener problemas a la hora de manejar esos valores. En todo caso lo reemplazaría por un caracter vacío (''), que trae menos complicaciones.
La idea sería entonces:
Código MySQL:
Ver original
  1.     IF( t4.Dir_Descripcion = t3.Dir_Descripcion, '', t1.Dir_Descripcion ) AS dato1,
  2.     IF( t4.Dir_Descripcion = t3.Dir_Descripcion, t1.Dir_Descripcion, t2.Dir_Descripcion ) AS dato2,
  3.     IF( t4.Dir_Descripcion = t3.Dir_Descripcion, t2.Dir_Descripcion, t3.Dir_Descripcion ) AS dato3,
  4.     IF( t4.Dir_Descripcion = t3.Dir_Descripcion, t3.Dir_Descripcion, t4.Dir_Descripcion ) AS dato4
  5.     tabla_datos AS t1 INNER JOIN tabla_datos AS t2 ON t1.Dir_Codigo = t2.Dep_Codigo
  6.     INNER JOIN tabla_datos AS t3 ON t2.Dir_Codigo = t3.Dep_Codigo
  7.     INNER JOIN tabla_datos AS t4 ON t3.Dir_Codigo = t4.Dep_Codigo
  8.     t1.Dir_Codigo = '605231000000'

Estoy reemplazando tu WHERE por INNER JOIN en el cruce de tablas porque un WHERE no es optimizable por el parser de MySQL y un FROM si. Es mucho más eficiente (y es la forma correcta de igualar campos relacionados entre tablas, si lo buscas en los manuales de SQL).

Por lo demás, no entiendo la lógica de la consulta, porque estas cruzando cuatro veces la misma tabla para obtener cierto dato en todas las columnas, pero usando siempre la misma comparación de las mismas tablas... ¿No se podría lograr lo mismo usando una sola tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)