Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
¿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...).

Desde ya, muchas gracias
Responder Con Cita
  #2  
Antiguo 29-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 29-08-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
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 .

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

Nuevamente, gracias
Responder Con Cita
  #4  
Antiguo 29-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que nada impide que anides una función IF dentro de otra. La sintaxis ya te la puse.

// Saludos
Responder Con Cita
  #5  
Antiguo 29-08-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 22
AzidRain Va camino a la fama
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
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 30-08-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 19
TiammatMX Va camino a la fama
¿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...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #7  
Antiguo 30-08-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 22
AzidRain Va camino a la fama
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.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 30-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #9  
Antiguo 01-09-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 19
TiammatMX Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
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.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Clausula Transform? GustavoCruz Firebird e Interbase 5 07-02-2008 23:19:03
clausula COUNT con Mysql karlaoax SQL 1 08-08-2007 05:23:27
Clausula Like JoseAntonio SQL 5 27-05-2007 08:28:47
Problemas con clausula IN en MySQL Coco_jac MySQL 7 12-07-2006 10:34:01
Clausula LIKE federiconqn21 SQL 3 28-12-2005 16:49:13


La franja horaria es GMT +2. Ahora son las 20:03:13.


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
Copyright 1996-2007 Club Delphi