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

ayuda como eliminar una columna de una consulta

Estas en el tema de ayuda como eliminar una columna de una consulta en el foro de Mysql en Foros del Web. Hola a todos soy nuevo en este foro un saludo a todos. Mi problema es el siguiente Tengo la siguiente consulta SELECT IF( t4.Dir_Descripcion = ...
  #1 (permalink)  
Antiguo 30/03/2010, 08:16
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Pregunta ayuda como eliminar una columna de una consulta

Hola a todos soy nuevo en este foro un saludo a todos.
Mi problema es el siguiente
Tengo la siguiente consulta

SELECT
IF( t4.Dir_Descripcion = t3.Dir_Descripcion, NULL , t1.Dir_Descripcion ) AS dato1,
if( t4.Dir_Descripcion = t3.Dir_Descripcion, t1.Dir_Descripcion, t2.Dir_Descripcion ) AS dato2,
if( t4.Dir_Descripcion = t3.Dir_Descripcion, t2.Dir_Descripcion, t3.Dir_Descripcion ) AS dato3,
if( t4.Dir_Descripcion = t3.Dir_Descripcion, t3.Dir_Descripcion, t4.Dir_Descripcion ) AS dato4
FROM
tabla_datos AS t1, tabla_datos AS t2, tabla_datos AS t3, tabla_datos AS t4
WHERE
t1.Dir_Codigo = '605231000000'
AND t2.Dir_Codigo = t1.Dep_Codigo
AND t3.Dir_Codigo = t2.Dep_Codigo
AND t4.Dir_Codigo = t3.Dep_Codigo
LIMIT 1

Esta consulta entrega 4 columnas y en un solo registro, pero el primer if de la consulta si es verdadero entrega un null y su es falso entrega los datos de la columna
pero lo que yo quiero es hacer que si la condición de ese if es verdadero no aparezca la columna que la consulta devuelva 3 columna
miren con un procedimiento almacenado esto logro hacer eso

DELIMITER $$
DROP PROCEDURE IF EXISTS `datos_necesarios` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `datos_necesarios`( super_datos char(15))
BEGIN
DECLARE existe BOOL;
SELECT
IF( t4.Dir_Descripcion = t3.Dir_Descripcion, true,false) into existe
FROM
tabla_datos t1
INNER JOIN tabla_datos t2 ON t2.Dir_Codigo = t1.Dep_Codigo
INNER JOIN tabla_datos t3 ON t3.Dir_Codigo = t2.Dep_Codigo
INNER JOIN tabla_datos t4 ON t4.Dir_Codigo = t3.Dep_Codigo
WHERE t1.Dir_Codigo = super_datos
LIMIT 1;
if existe then

SELECT
t1.Dir_Descripcion AS dato2,
t2.Dir_Descripcion AS dato3,
t3.Dir_Descripcion AS dato4
FROM
tabla_datos t1
INNER JOIN tabla_datos t2 ON t2.Dir_Codigo = t1.Dep_Codigo
INNER JOIN tabla_datos t3 ON t3.Dir_Codigo = t2.Dep_Codigo
INNER JOIN tabla_datos t4 ON t4.Dir_Codigo = t3.Dep_Codigo
WHERE
t1.Dir_Codigo = super_datos
LIMIT 1;

else

SELECT
t1.Dir_Descripcion AS dato1,
t2.Dir_Descripcion AS dato2,
t3.Dir_Descripcion AS dato3,
t4.Dir_Descripcion AS dato4
FROM
tabla_datos t1
INNER JOIN tabla_datos t2 ON t2.Dir_Codigo = t1.Dep_Codigo
INNER JOIN tabla_datos t3 ON t3.Dir_Codigo = t2.Dep_Codigo
INNER JOIN tabla_datos t4 ON t4.Dir_Codigo = t3.Dep_Codigo
WHERE
t1.Dir_Codigo = super_datos
LIMIT 1;

end if ;
END $$

DELIMITER ;

Esta función es llamada el siguiente procedimiento almacenado
CALL destacamento('605231000000');
Pero no lo puedo hacer con un procedimiento almacenado porque el servidor de la base de datos es en mysql 4,x y ahí no hay procedimientos almacenados
Por favor necesito saber como o con que hacer esa validación
De antemano gracias por la ayuda de todos
  #2 (permalink)  
Antiguo 30/03/2010, 09:04
Avatar de 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, 4 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)
  #3 (permalink)  
Antiguo 30/03/2010, 10:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Respuesta: ayuda como eliminar una columna de una consulta

lo que pasa es que la tabla llamada tabla_datos tiene mucha información relacionada con códigos cruzados y con esos códigos cruzados de determinan diferentes descripcion.
Por ejemplo

Código HTML:
Ver original
  1. dir_codigo          descripcion       Dep_Codigo
  2.  
  3. a                        descripcion a       b
  4.  
  5. b                        descripcion b       c
  6.  
  7. c                         descripcion c       d
  8.  
  9. d                        descripcion d       d

la consulta devuelve

Código HTML:
Ver original
  1. dato1               dato2                dato3              dato4  
  2. descripción a    descripción b     descripción c   descripción d

pero hay casos en que el criterio de búsqueda me entrega
Código HTML:
Ver original
  1. dato1               dato2                dato3              dato4  
  2. null                  descripción b     descripción c   descripción d

lo que quiero es que entregue


Código HTML:
Ver original
  1. dato2                dato3              dato4  
  2. descripción b     descripción c   descripción d

Para los efectos de requerimientos de la aplicación tiene que ser vía consulta y no via aplicación "los jefes tu me entiendes le complican la vida a uno para facilitárselas ellos".
Cita:
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).
Eso no te lo entendí demasiado pero no importa por ahora tu como lo harías.
Gracias

Etiquetas: columna, eliminar
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 22:13.