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
3 Réponses :
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/
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 :)
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)
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 ...."
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 >