Il ne s'agit pas de race.id 4 mais 7 qui devrait être retourner. Mais cela ne change rien la requête devrait renvoyé la ligne sphynx comme avec ta jointure LEFT.
Je ne comprend vraiment pas pourquoi la dernière renvoie vide
Retourne trop d'entrée,mais j'ai regarder et il n'y à pas l'entrer 7 (confirmé par la requête avec le distinct).
J'en suis à me demander si mysql n'interprète pas le NOT IN différemment des autres SGBD (mais je n'ai pas trouver d'information sur internet me confirmant mon hypothèse).
Sur ton screen aucun n'a race_id = 7 mais beaucoup sont NULL
Après étant donné que NULL <> NULL, un IN comme un NOT IN ne feront jamais apparaître une valeur NULL (elles sont de fait exclues par la condition). Ce qui expliquerait que le NOT IN ne renvoie rien mais qu'un LEFT JOIN, qui inclut les NULL (WHERE A.race_id IS NULL), donnent 2 résultats différents, le premier n'incluant pas les valeurs NULL contrairement au second.
C'est exactement cela. J'ai tester les requêtes de umfred et effectivement la valeur NULL viens court-circuiter.
J'ai adapté la requête et maintenant celle-ci est fonctionnelle.
Merci à tous pour votre aide.
select r.nom,r.id
from Race as r
where r.id NOT IN (select distinct race_id from Animal where race_id IS NOT NULL);
Operateur NOT IN different de IN?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli