PDA

Ver la Versión Completa : ¿Clausula If Then Else en MYSQL...?


Walterio
29-08-2012, 18:22:05
Hola a todos...
Lo del título, ¿se puede hacer funcionar en un query a una base MySQL usando las sentencias If Then y Else ?.
Viendo en el manual de referencia de MySQL 5.0 esto se puede hacer (hablan de procedimientos almacenados, no de una query común).
Si se puede, ¿de que forma? (la sintaxis correcta, obvio...:D).

Desde ya, muchas gracias

roman
29-08-2012, 18:36:54
MySQL soporta condicionales, aunque no me queda claro a qué te refieres con hacer funcionar una query en una base MySQL.

En una consulta SQL puedes usar la función IF


select
if (condición boolena, resultado si es cierta, resultado si es falsa),
otros campos
from
...


También está la sentencia CASE:


select
case valor de un campo
when valor then resultado
when valor then resultado
when valor then resultado
...
end,
otros campos
from
...


// Saludos

Walterio
29-08-2012, 19:03:01
Hola Román, muchas gracias por la respuesta.
Lo que necesito es otorgarle un determinado valor a un campo, dependiendo de varias opciones (más de 2), con lo cual, con la función IF() sólo tengo dos posibilidades de respuesta.
Un ejemplo escrito muy burdamente de lo que necesito hacer es :

Select Campo1,
Campo2,
Campo3,
{Aqui viene mi intento de If}
(Select
If TDC=1 and LDC=3 and CCC=4 and XCC5 THEN 'Caja1' //Aqui evaluo ciertos campos...
ELSEIF TDC=1 and LDC=3 and CCC=4 and XCC5 AND SDC<>1 THEN 'Caja2' //Aqui evaluo los mismos campos mas algun otro...
ELSEIF 'Cualquiera'
End) as Prueba
) As Campo4
From Tabla

Como verás, en el Campo4 debo obtener un valor evaluando distintas condiciones :eek:.

Obviamente, como la sintaxis sé que no es la correcta por desconocerla.

Nuevamente, gracias

roman
29-08-2012, 19:07:53
Creo que nada impide que anides una función IF dentro de otra. La sintaxis ya te la puse.

// Saludos

AzidRain
29-08-2012, 19:32:45
Es como dice Roman, tienes que anidar los IFs algo asi:



select campo1, campo2,
IF(TDC=1 and LDC=3 and CCC=4 and XCC5,'Caja1', IF( TDC=1 and LDC=3 and CCC=4 and XCC5 AND SDC<>1, 'Caja2', 'Cualquiera') ) as num_caja
from tabla

De esta forma el conjunto de IFS anidados se convierte en el campo "num_caja" (podrías ponerle el nombre que quieras)

También se puede escribir así para mejor lectura:

select campo1, campo2,
IF(TDC=1 and LDC=3 and CCC=4 and XCC5, 'Caja1',
IF( TDC=1 and LDC=3 and CCC=4 and XCC5 AND SDC<>1, 'Caja2', 'Cualquiera') ) as num_caja
from tabla

TiammatMX
29-08-2012, 23:28:53
¿Y si "armas" la sentencia SQL desde tu aplicación? Digo, puede ser mejor...

O usar el "CASE WHEN" (o su equivalente en MySQL) para evitarte la ristra de IF, que a la larga pueden ser difíciles de depurar en caso de fallo...

AzidRain
30-08-2012, 20:45:42
No se puede usar un case porque la condición que está evaluando incluye varios campos y case solo soporta un campo que puede tomar muchos valores. En el caso que puso nuestro amigo evalúa distintos campos y el resultado solo puede ser cierto o falso por lo que es mejor el uso de ifs. Eso sí, tiene que tener mucho cuidado en como escribe la sentencia para que no le sea dificil depurar.

roman
30-08-2012, 21:07:12
Yo lo que no entiendo es eso de armar la sentencia sql desde la aplicación. No sé si tiammat se refiera a que en lugar de calcular el campo en SQL mejor se calcule en delphi, ya en el código cliente. De hecho, quizá sea lo mejor. Cuando una consulta SQL es tan complicada, siempre me da la sensación de que no es bueno el camino.

// Saludos

TiammatMX
01-09-2012, 14:53:47
Yo lo que no entiendo es eso de armar la sentencia sql desde la aplicación. No sé si tiammat se refiera a que en lugar de calcular el campo en SQL mejor se calcule en delphi, ya en el código cliente. De hecho, quizá sea lo mejor. Cuando una consulta SQL es tan complicada, siempre me da la sensación de que no es bueno el camino.

// Saludos

Exacto, entendiste bien...

Normalmente, lo que hago (y lo que le sugiero al compañero) es que dentro de la aplicación armar el SQL completo, con sus parámetros y datos para "cerrar" el resultado, pasarlo al componente de conexión de su preferencia y que el motor de bases de datos regrese el resultado deseado. No es complicado, aunque a veces hay que trabajarlo un poquitín...

Saludines.