web-dev-qa-db-fra.com

IF ... ELSE dans la clause WHERE MySQL

J'essaie d'utiliser une fonction IF ... ELSE dans une instruction MySQL WHERE sans succès.

J'ai cette requête:

SELECT id 
FROM mytable 
WHERE restrcountry NOT LIKE '%*nl*%' 
  AND (IF languages LIKE '%*nl*%', 1, 0) = 1;

Ok, c'est ma requête avec l'instruction IF.

Cependant, comment puis-je utiliser également "ELSE"?

Exemple, je voudrais faire quelque chose de similaire:

SI la langue correspond nl ---> sélectionnez le champ id où la langue est nl

AUTRE SI la langue NE correspond PAS nl ---> sélectionner le champ id où la langue est en

Comment puis-je le faire dans une requête MySQL, s'il vous plaît?

Merci à tous!

10
David Madhatter

La syntaxe de IF est:

 IF(test_expr, then_expr, else_expr)

vous pourriez donc faire quelque chose comme IF(test1, result1, IF(test2, result2, else_result)) mais ce ne serait pas très lisible, donc il y a l'expression CASE à cet effet.

CASE WHEN  test1 THEN result1
WHEN test2 THEN result2
ELSE else_result END

Si vous souhaitez conditionner une colonne de sélection, vous pouvez utiliser directement le IF dans les champs de sélection:

SELECT IF(match, nl_column en_column) AS lang 
FROM table

Notez qu'une expression dans une clause where est TRUE ou FALSE, donc en écrivant

IF(expr, TRUE, FALSE)

est le même que

expr
16
didierc

utilisez plutôt CASE

CASE
    WHEN languages LIKE '%*nl*%' THEN 1 
    WHEN languages NOT LIKE '%*nl*%' THEN 0
 END as languages 
8
sasi