Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿Clausula If Then Else en MYSQL...? (https://www.clubdelphi.com/foros/showthread.php?t=80029)

Walterio 29-08-2012 18:22:05

¿Clausula If Then Else en MYSQL...?
 
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

Código SQL [-]
select
  if (condición boolena, resultado si es cierta, resultado si es falsa),
  otros campos
from
  ...

También está la sentencia CASE:

Código SQL [-]
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 :

Código SQL [-]
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:


Código SQL [-]
 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:
Código SQL [-]
 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

Cita:

Empezado por roman (Mensaje 441282)
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.


La franja horaria es GMT +2. Ahora son las 05:38:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi