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

¿Qué está mal con mi sintaxis MySQL CASE/WHEN?

Después de revisar su comentario sobre la declaración fija pero el segundo problema inmediato, quedó claro que no está usando esto dentro de un procedimiento o función almacenados. La documentación para flow control statements establece muy sutilmente que deben estar dentro de los procedimientos/funciones almacenados.

Actualice su código para estar dentro de un procedimiento, y luego simplemente llame al procedimiento para ejecutarlo:

USE mysql;

DROP PROCEDURE p;
DELIMITER |
CREATE PROCEDURE p() BEGIN
    CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 
        WHEN 1 THEN
            DROP USER ''@'localhost';
            FLUSH PRIVILEGES;
        ELSE
            SELECT 'no users found!';
    END CASE;
END;
|

CALL p();

También tenga en cuenta que agregué un catch-all ELSE bloquear; si no capta el valor, CASE arrojará una advertencia de "Caso no encontrado", que puede o no ser deseable.