Si j'exécute SELECT * FROM table; sur l'une de mes tables, j'obtiens 87709 lignes.
Si j'exécute à la place SELECT * FROM table WHERE isDeleted = 0 OR isDeleted = 1; sur la même table, j'obtiens 87686 lignes.
isDeleted n'a que les valeurs 0 ou 1, ce que j'ai confirmé avec SELECT DISTINCT isDeleted FROM table;
Où sont passées les 23 lignes manquantes?
RÉPONSE:
Merci de Roland Aaronson d'avoir signalé que phpMyAdmins "count" n'est pas aussi précis que COUNT ( *) .
Est-ce que SELECT COUNT (*) FROM table; et SELECT COUNT (*) FROM table WHERE isDeleted = 0 OR isDeleted = 1; qui a donné le même nombre de lignes ! * YAY *
3 Réponses :
exécutez cette requête SELECT * FROM table WHERE isDeleted ISNULL , puis vous obtiendrez des lignes avec la valeur null. S'il comporte 23 lignes, c'est là que réside le problème
Peut-être. Que faire si isDeleted est nullable et a une valeur de NULL ?
Puis il le verra dans les résultats, j'ai également eu la même suspision. S'il est effectivement nul, la colonne doit être modifiée pour être rendue non nullable
Non! NULL ne compare jamais égal ou non égal à 0 ou 1 ou à toute valeur, pas même NULL.
Oh, je viens de vérifier ça. Vous avez raison. mettre à jour ma réponse
«IS NULL» et non «ISNULL». Mais cela a déjà été proposé comme réponse.
Ah, je vois que votre réponse est plus complète. ISNULL fonctionne également dans postgres, je pensais que cela fonctionnerait avec mysql
ISNULL est une fonction. par exemple, ... WHERE ISNULL (expr) , qui renvoie 0 ou 1 si expr est NULL ou non. Donc, vous auriez eu besoin de ... WHERE ISNULL (isDeleted)
Je sais que ISNULL est une fonction dans mysql, dans postgres ISNULL est une construction non standard pour IS NULL
isDeleted n'a pas la valeur NULL . Juste pour être sûr, j'ai vérifié avec SELECT * FROM table WHERE isDeleted IS NULL;
Essayez :
SELECT isDeleted, COUNT(*) from table GROUP BY isDeleted;
Si vous voulez obtenir un décompte précis et toutes les valeurs distinctes. Je suppose que votre "décompte" pourrait être ce que quelque chose comme phpMyAdmin montre, ce qui peut ne pas être exact.
tu avais raison! Le "nombre" affiché par phpMyAdmin n'est pas aussi précis que COUNT (*)
Vous pouvez confirmer que les valeurs ne sont pas nulles par
SELECT * FROM table WHERE isDeleted N'EST PAS NULL
Si NULL n'apparaît pas sur SELECT DISTINCT ... , il n'apparaîtra pas ici non plus.
vous obtenez seulement 2 lignes renvoyées lorsque 'SELECT DISTINCT isDeleted FROM table;' ?
@ P.Salmon oui, 0 et 1