Je veux mettre à jour une table dans MySQL comme ceci:
UPDATE table SET A = IF(A > 20, 20, IF(A < 20, A, 0));
3 Réponses :
UPDATE Table SET A = 20 where A > 20; UPDATE Table SET A = 0 where A <= 1;
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.
Je pense que vous étiez 99% là-bas: Ajouter le edit: strong> p> Commentaire de @ Andre à la question et la suggestion que le 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. P> 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. P> 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 && a> 1 code> à la seconde si la déclaration et votre troisième condition est satisfaite. P > imbriqué si code> est difficile à lire, vous pouvez aussi faire ceci comme quelques requêtes qui ne font pas de travail inutile et sont lisibles: p> << / code> pour <= code>. p> p>
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
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) code>