Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/03/2010, 08:16
nelsonforos
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
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