sql >> Base de Datos >  >> RDS >> Mysql

MySQL - CASE vs declaración IF vs función IF

Del manual , parece el if la función es solo una forma menos flexible del case expresión. Por ejemplo, podrías escribir:

select if(username = 'darxysaq', 'high', 'low') as awesomeness

Y el equivalente con case :

select case when username = 'darxysaq' then 'high' else 'low' end as awesomeness

Pero case es más flexible. Permite más de una rama, como:

select case 
       when username = 'darxysaq' then 'high' 
       when username = 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness

Y puede actuar como un switch :

select case username 
       when 'darxysaq' then 'high' 
       when 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness

Ahora el if declaración es una bestia completamente diferente. Es una sentencia de control en los procedimientos de MySQL . El formulario de declaración se ve así:

CREATE FUNCTION GetAwesomeness (username varchar(50))
RETURNS varchar(20)
BEGIN
   IF username = 'darxysaq' THEN
      return 'high';
   ELSEIF username = 'john skeet' THEN
      return 'medium';
   ELSE
     return 'low';
   END IF;
END; //

Aquí hay un SQL Fiddle con la versión de declaración. ¡Parece que Mr Bean no es todo lo que se supone que es!

Una nota final:el case expresión es SQL estándar y funciona en la mayoría de las bases de datos. El if La función no es SQL estándar y no funcionará en otras bases de datos, como SQL Server o PostgreSQL.