7
votes

Comment utiliser si alors autre dans une requête de mise à jour MySQL?

Je veux mettre à jour une table dans MySQL comme ceci:

UPDATE table
SET A = IF(A > 20, 20, IF(A < 20, A, 0));


1 commentaires

Vous n'avez pas besoin du second cas. Set A = A ne fait rien. Filtrer cela dans la clause WHERE, devrait être plus rapide: où A n'est pas NULL et (A> 20 ou A <= 1)


3 Réponses :


5
votes
UPDATE Table
SET A = 20 
where A > 20;

UPDATE Table
SET A = 0
where A <= 1;

3 commentaires

Les cas ne doivent-ils pas omettre les citations simples d'utiliser des valeurs INT (plutôt que des littéraux de chaîne comme '20' et 'A' etc.)?


Son illustratif, son original a des incompatibles de type similaires, je n'ai pas voulu deviner


Bon point. Bien que si la valeur stockée est un INT, le comparer à '20' fonctionnera dans MySQL, le réglage également à «20» fonctionnera également, car MYSQL évaluera et convertira la chaîne <-> int. Cependant 'A' entraînera une erreur de type.



12
votes

Je pense que vous étiez 99% là-bas: xxx

Ajouter le && a> 1 à la seconde si la déclaration et votre troisième condition est satisfaite.

edit:

Commentaire de @ Andre à la question et la suggestion que le imbriqué si est difficile à lire, vous pouvez aussi faire ceci comme quelques requêtes qui ne font pas de travail inutile et sont lisibles: xxx

lorsque A est null, il ne répondra aucune de ces conditions et élimine ainsi La nécessité de préciser que cela ne soit pas nul.

Ensuite, il n'y a pas besoin de la troisième condition que @andre suggérée. Si A est compris entre 1 et 20, il reste laissé tel quel.

Enfin, régler A à 0 où A est inférieur ou égal à 1 semble inhabituel. Les valeurs de 1 seront modifiées à 0. Si vous avez l'intention de définir simplement des valeurs inférieures à 1 (y compris des valeurs négatives) à 0, vous devez échanger << / code> pour <= .


0 commentaires

0
votes

Avec l'aide de la requête ci-dessous, vous pouvez mettre à jour le champ de salaire en fonction des conditions. C'est une requête de mise à jour unique pour mettre à jour plusieurs rangées dans une table en fonction des conditions.

UPDATE table
SET salary = Case
WHEN designation='developer' THEN salary + salary*0.20
WHEN designation='manager' THEN salary + salary*0.30
END


0 commentaires