2013-02-05 15 views
6
SELECT * 
    FROM table WHERE id IN ('21') 
    AND (content_id IS NULL OR content_id = 0 OR content_id = '') 

C'è un modo più breve di scrivere questa condizione.mysql, se non nullo, 0 o ""

Ho una colonna int(), che potrebbe essere sia: NULL, 0 o vuoto.

+1

Una colonna int Null può essere sia un int o NULL - non può essere una stringa vuota. –

+0

è content_id una colonna int o una colonna varchar? se si tratta di una colonna int non c'è bisogno di controllare se content_id = '' in modo penso di cancellare la mia risposta :) – fthiella

risposta

7

È possibile utilizzare la funzione IFNULL in MySQL.

select ____ 
    from tbl 
where IFNULL(content_id, 0) = 0 
1

Si può provare COALESCE:

SELECT * FROM table WHERE id IN ('21') 
AND COALESCE(content_id,0) =0; 
+0

Coalesce è mobile per tutte le piattaforme RDBMS. Controlla qui per un confronto tra [SQL ISNULL(), NVL(), IFNULL() e COALESCE() Funzioni] (http://www.w3schools.com/sql/sql_isnull.asp) – bonCodigo

2

Penso che il modo più breve è questa:

SELECT * 
FROM table 
WHERE id IN ('21') 
     AND COALESCE(content_id IN ('0', ''), 1) 

content_id IN ('0', '') possono assumere questi valori:

  • Vero se conent_id è o '0' o ''
  • Null se conent_id IS Null
  • False altrimenti.

Se è Nullo, con COALESCE sto restituendo 1, che è equivalente a Vero.

Problemi correlati