es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si la declaración de MySQL devuelve vacío o nulo, entonces establecer en 0.

Usando MySQL (MariaDB)

Estoy buscando ver si una subconsulta devuelve nulo, si es así quiero que sea 0. No puedo lograr que esto funcione.
Los valores en esta declaración deberían devolver NULL (no existen en mi base de datos). ¿Qué estoy haciendo mal?

SELECT 
   (COALESCE(SELECT z.ID FROM bus_values z WHERE (z.BUS_NUM=35 AND z.WORKER_ID=2922882), 0)) AS BUS_ID, 
   XVAL, 
   YVAL, 
   ZVAL, 
   DATE_ENTERED 
FROM data_points WHERE (WORKER_ID=2922882);

MySQL me está diciendo que tengo un error de sintaxis en la línea (COALESCE(SELECT ...

También he intentado usar IFNULL()

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Respuesta

    En este escenario, el error de sintaxis se debe a que se coloca la subconsulta dentro de paréntesis sin indicarle a MySQL que es una subconsulta. Para solucionarlo, la subconsulta debe estar encerrada en su propio conjunto de paréntesis antes de agregar la función COALESCE.

    Aquí tienes un ejemplo de cómo debería verse la consulta:

    SELECT 
       (COALESCE((SELECT z.ID FROM bus_values z WHERE (z.BUS_NUM=35 AND z.WORKER_ID=2922882)), 0)) AS BUS_ID, 
       XVAL, 
       YVAL, 
       ZVAL, 
       DATE_ENTERED 
    FROM data_points WHERE (WORKER_ID=2922882);
    

    Al encerrar la subconsulta en su propio conjunto de paréntesis, MySQL ahora sabe que es una subconsulta y puede evaluar correctamente la función COALESCE.

    Además, también se podría usar IFNULL en lugar de COALESCE si la subconsulta estuviera encerrada entre paréntesis.

    SELECT 
       (IFNULL((SELECT z.ID FROM bus_values z WHERE (z.BUS_NUM=35 AND z.WORKER_ID=2922882)), 0)) AS BUS_ID, 
       XVAL, 
       YVAL, 
       ZVAL, 
       DATE_ENTERED 
    FROM data_points WHERE (WORKER_ID=2922882);
    

    Cualquiera de estas opciones devolvería un valor 0 cuando la subconsulta devuelve NULL.

Comments are closed.