2013-05-23 2 views
3

J'ai une table nommée plateforme avec une colonne nommée entityid. Les données dans entityid sont supposées adhérer au format n.n.n (où n = un nombre de 1 ou plusieurs chiffres, le premier numéro est un identifiant de site).MySQL LIKE et NOT LIKE est manquant un enregistrement

Si je lance cette requête:

SELECT count(*) FROM platform 

Je reçois: 16063 donc que j'ai 16063 lignes dans ma table. Lorsque je tente de filtrer pour le site seulement 18 je lance cette requête:

SELECT count(*) FROM platform 
where entityid like '18.%.%' 

je reçois: 4454 Jusqu'à présent, si bon. Mais si j'essaie de trouver des plates-formes non sur le site 18:

SELECT count(*) FROM platform 
where entityid not like '18.%.%' 

je reçois: 11608 Voici le problème: 4454 + 11608 = 16062
Il me manque un record. Je pense que je reçois toutes les plateformes qui se trouvent sur le site 18, puis toutes les plateformes qui ne sont pas sur le site 18 - comment est-ce que je manque un enregistrement?

+1

Valeur NULL? Trouvez-la avec 'SELECT * FROM plate-forme O WH entityID NOT IN (SELECT entityID FROM plate-forme WHERE entityID PAS COMME '18.%.% ') ET entityID NOT IN (SELECT entityID FROM plateforme O WH entityID LIKE '18.%.%')' –

+0

Vous avez probablement un enregistrement avec un entityid nul, qui échouera toutes les conditions sauf 'is null'. – Kevin

+0

Est-ce que entityid peut être nul? –

Répondre

3

Le problème est probablement une valeur nulle. Essayez et voir si elle retourne un enregistrement:

select * 
from platform 
where entityid is null; 

valeurs NULL ne presque toutes les comparaisons (sauf pour is null).

+0

Oui, un enregistrement avec un entityid NULL. Merci! – JeffW