2010-09-04 2 views
1

J'ai une table T qui a une colonne A. A commencé avec une valeur par défaut de NULL. 40 lignes plus tard, j'ai changé la valeur par défaut à 1. Trois lignes avaient une valeur de 2. J'ai essayé de sélectionner toutes les lignes où la colonne A où pas 2 et les mettre à la nouvelle par défaut de 1 (qui ne s'est pas produit automatiquement lorsque je modifié la table). J'ai d'abord essayé:MySQL pas et pas égal des opérateurs échouent, ce qui donne?

update T set A=1 where A != 2; 

Nada. N'a pas fonctionné. Lignes zéro sélectionnées Ensuite j'ai essayé:

update T set A=1 where !(A=2); 

Non, rien là non plus. J'ai essayé de les brancher sur des sélections, pour voir si quelque chose n'allait pas avec la mise à jour, mais celles-ci n'ont rien retourné non plus. Le manuel de référence MySQL dit que! = Et! sont des opérateurs valides et devraient être parfaitement valides dans ce contexte. J'ai finalement atteint mon objectif en utilisant IS NULL, mais ces déclarations devraient fonctionner. Alors qu'est-ce qui donne? Pourquoi cela n'a-t-il pas fonctionné?

J'exécute la version MySQL: 5.1.41-3ubuntu12.6 (Ubuntu)

Répondre

3

Essayez:

update T set A=1 where A != 2 or A is null; 

comparaisons impliquant NULL à évaluer NULL(UNKNOWN) et sera donc jamais vrai.

+0

Mentionné dans la question que j'ai déjà atteint mon objectif en utilisant IS NULL. Sens, je l'ai déjà fait. Mais merci pour le peu de comparaisons impliquant NULL! –

Questions connexes