0
votes

Utilisez 'IF' pour détecter NULL dans la requête de mise à jour mysql

Je veux donner à l'utilisateur le choix «d'écraser» les valeurs d'un champ dans une table ou «d'ajouter» à la valeur de la table. Le problème est que parfois le champ de la table est nul, donc si l'utilisateur choisit `` ajouter '', rien n'est mis à jour car mysql ajoute null à 10 par exemple

J'ai ensuite essayé d'utiliser l'instruction 'IF' pour détecter si le champ dans le tableau est nul pour que je puisse faire une mise à jour directe et sinon j'ajoute la nouvelle valeur à la valeur déjà dans le tableau.

Requête:

UPDATE
   table1 
   INNER JOIN
      table2 
      ON table1.ID = table2.Table1ID 
SET
   table1.column = 
   (
      IF table1.column = NULL 
   THEN
      table2.column 
   ELSE
      table1.column + table2.column
   )

J'ai une erreur qui indique qu'il y a un problème avec mon instruction sql. J'ai essayé d'utiliser 'IS NULL' au lieu de '= NULL' mais cela ne fonctionne pas non plus


0 commentaires

3 Réponses :


1
votes

Vous devez utiliser IF (table1.column est nul alors ...........)

à la place = opérateur dont vous avez besoin IS NULL ou IS NOT NULL en cas de vérification de null

De plus, votre clause ON semble avoir une faute de frappe .. elle devrait être table1.ID = table2.Table1ID

Mise à jour

J'ai complètement manqué l'erreur de syntaxe, alors changez votre clause définie à:

SET table1.column = (IF table1.column IS NULL, table2.column, table1.column + table2.column )

Pour votre référence: https://www.electrictoolbox.com/mysql-using-if-in-where/


3 commentaires

Merci Bilal. J'ai changé l'opérateur = en IS NULL mais j'ai toujours la même erreur. En ce qui concerne la faute de frappe, je l'ai mal tapée ici, mais dans le code réel, c'est correct. L'erreur est "Vous avez une erreur dans votre syntaxe mysql .... près de 'table1.column IS NULL THEN' ....


Oh oui! il y a une erreur de syntaxe. Je mets à jour ma réponse


Fait !! Désolé car je suis sur un téléphone portable, j'ai donc manqué des choses dans une police plus petite et votre requête était une ligne au départ. Cela devrait fonctionner maintenant !! Profitez :)



1
votes

IF () est une fonction, mais vous l'utilisez comme l'instruction CASE . Vous obtenez donc une erreur de syntaxe.
Utilisez-le comme ceci:

UPDATE table1 INNER JOIN table2 
ON table1.ID = table1.Table1ID 
SET table1.column = COALESCE(table1.column, 0) + table2.column 

ou utilisez une instruction CASE:

UPDATE table1 INNER JOIN table2 
ON table1.ID = table1.Table1ID 
SET table1.column = CASE 
  WHEN table1.column IS NULL THEN table2.column
  ELSE table1.column + table2.column
END

ou utilisez COALESCE ():

UPDATE table1 INNER JOIN table2 
ON table1.ID = table1.Table1ID 
SET table1.column= IF(table1.column IS NULL, table2.column, table1.column + table2.column)


5 commentaires

case expression .


Travaillé. Merci!


@jarlh oui et non. Ici: dev.mysql.com/doc/refman/5.7/en/ case.html il est référencé comme instruction . Ici: docs.microsoft.com/en-us/sql/t-sql/language-elements/... comme expression . Dans la plupart des sites Web orientés SQL, il s'agit de instruction . Je pense que le terme technique correct est expression mais ................


La documentation MySQL est un peu déroutante. Une expression case renvoie une valeur et peut être utilisée dans un SELECT, etc. Une instruction case est pour l'exécution conditionnelle de code, par exemple dans une procédure stockée ou un déclencheur.


Ce n'est pas seulement la documentation MySql. Il suffit de google "CASE sql". La plupart des résultats auront: "L'instruction CASE ...."



0
votes

Premièrement, rien ne se compare à NULL, pas même NULL. Deuxièmement, vous devriez utiliser la IF fonction:

UPDATE table1 INNER JOIN table2 ON table1.ID = table2.Table1ID
   SET table1.column = IFNULL(table1.column, 0) + table2.column

ou

UPDATE table1 INNER JOIN table2 ON table1.ID = table2.Table1ID
   SET table1.column = IF(table1.column IS NULL, table2.column, table1.column + table2.column)

p >


0 commentaires