Tengo el siguiente consulta:

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?;

Ahora quiero que si ‘?’ es NULO, todos los registros tienen que ser seleccionados.
¿Cómo puedo lograr esto en SQL?
Gracias

  • Esto me hace odiar T-SQL aún más…
InformationsquelleAutor Franky | 2012-11-20

4 Comentarios

  1. 30

    También puede utilizar las funciones de IFNULL,COALESCE,NVL,ISNULL para comprobar el valor null. Depende de tu RDBMS.

    MySQL:

    SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME);

    o

    SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME);

    ORACLE:

    SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME);

    SQL Server /SYBASE:

    SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME);
    • Esto no funcionará si hay valores nulos en NAME. Pero para que no aceptan valores null columnas este es el camino a seguir =) (EDIT: al menos no en SQL Server)
    • Ten en cuenta que esto puede producir más lento consultas que condicionar el SQL para que no contenga la cláusula where cuando el parámetro es null.
  2. 64

    Intente esto:

    SELECT * 
    FROM MY_TABLE 
    WHERE @parameter IS NULL OR NAME = @parameter;
    • Cómo utilizar esto en PHP ?
    • Simplemente ejecutar la consulta en PHP
    • Traté de exucute de la cadena de consulta, pero su dar al acceder al resultado. Diciendo: indefinido llamada a la función fetch_assoc
    • Esto no tiene nada que ver con MySQL, tienes un problema en tu código php. Acaba de hacer una nueva pregunta aquí sobre ello.
  3. 0
    SELECT NAME
    FROM MY_TABLE
    WHERE NAME LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END

    Esto va a funcionar a la perfección, pero se devolverá sólo los no valores nulos.

  4. 0

    La foll. consulta va a tratar el caso en que el Nombre (columna de la tabla de valor) también puede ser NULL:

    SELECT NAME, SURNAME FROM MY_TABLE WHERE COALESCE(NAME,'') = COALESCE(?,NAME,'');

Dejar respuesta

Please enter your comment!
Please enter your name here