2011-08-26 13 views
5

Sto cercando di capire che cosa questo SQL (da un'installazione di MySQL) realmente fa:Cercando di analizzare questo sql

IF(coalesce(a.entity_id, 0) != 0, 0, 1) 

Pur comprendendo ciò che il coalesce fa Non capisco come l'istruzione IF è modificandolo.

risposta

3

penso:

fondono (a.entity_id, 0) - restituire il primo valore non nullo,

se a.entity_id non è nullo si ottiene 0 come risultato di se, altro 1.

a.entity_id = null => fondersi = 0 => = 1 se

a.entity_id non è nullo => = fondersi a.entity_id => se = 0

2

coalesce restituisce il primo nON -n argomento. Quindi, se a.entity_id è nullo, la coalesce restituirà 0. il if() contenente quindi verifica se l'argomento non è zero e restituisce 0 o 1.

in pratica è un modo contorto di scrivere a.entity_id IS NULL.

+4

'a.entity_id È NULL o a.entity_id = 0' –

1

Stai guardando la funzione MySQL IF(). In sostanza si tratta di un operatore ternario sull'espressione booleana fornito in argomento 1. (Suona dalla tua domanda che hai capito con che COALESCE sta facendo.)

  • se Espr1 è TRUE (expr1 <> 0 e expr1 <> NULL) IF() restituisce expr2;
  • Se expr1 è FALSE, restituisce expr3.

IF() restituisce un valore numerico o stringa, a seconda del contesto in cui viene utilizzato.

mysql> SELECT IF(1>2,2,3); 
     -> 3 
mysql> SELECT IF(1<2,'yes','no'); 
     -> 'yes' 
mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); 
     -> 'no' 

E 'un modo davvero originale non leggibile di non utilizzare a.entity_id IS NULL.

0

mi sembra questa clausola valuterà a 0 se a.entity_id non è nullo, e 1 contrario.

1

La condizione sarà soddisfatta se a.entity_id è un valore che non è NULLE non0.

Problemi correlati