2011-08-26 7 views
5

Estoy tratando de entender lo que este SQL (desde una instalación de MySQL) realmente hace:intentar analizar este SQL

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

Si bien entiendo lo que hace la coalescencia No entiendo cómo la instrucción IF es modificándolo.

Respuesta

3

pienso:

se unen (a.entity_id, 0) - devuelve el primer valor no nulo,

si no es nulo a.entity_id que presentamos lo mejor 0 como resultado de si, de lo contrario 1.

a.entity_id = null => coalescer = 0 => si = 1

a.entity_id no es nulo => coalescer = a.entity_id => si = 0

2

coalesce devuelve el primer nO -norte argumento ull Entonces si a.entity_id es nulo, coalesce devolverá 0. the containing if() luego verifica si el argumento no es cero, y devuelve 0 o 1.

básicamente es una forma complicada de escribir a.entity_id IS NULL.

+4

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

1

Usted está mirando MySQL IF() función. Básicamente se trata de un operador ternario en la expresión booleana suministrado en el argumento 1. (Suena por su pregunta que usted entiende con el que se unen está haciendo.)

  • Si expr1 es TRUE (expr1 <> 0 y expr1 <> NULL) luego IF() devuelve expr2;
  • Si expr1 es FALSE, devuelve expr3.

IF() devuelve un valor numérico o de cadena, dependiendo del contexto en el que se utiliza.

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' 

Es una manera muy funky no legible de no utilizar a.entity_id IS NULL.

0

Me parece que esta cláusula se evalúa a 0 si a.entity_id no es nulo, y 1 en caso contrario.

1

La condición se cumplirá si a.entity_id es un valor que no es NULLY no 0.

Cuestiones relacionadas