sihammaster
Messages postés41Date d'inscriptionsamedi 19 juillet 2008StatutMembreDernière intervention19 septembre 2013
-
12 nov. 2012 à 18:09
mudenstrasse -
12 févr. 2014 à 11:40
Bonjour,
j'ai 2 tables sql, table_A et table_B dont je voudrais sélectionner les données existent dans table_A et non dans la table table_B,
j'ai utilisé la requête suivantes:
select titre from table_A where titre not in(select titre from table_B)
cette requête a marché bien avant mais maintenant ca retourne 0, meme s'il y'a des données.
je sais pas est ce que ça lié au nombre d'enregistrements parce que mes tables ont passés les 2 millions d'enregistrements,
Merci d’avance.
pmcoste
Messages postés72Date d'inscriptionmercredi 7 février 2007StatutMembreDernière intervention25 juillet 20131 21 nov. 2012 à 20:13
Non, l'opérateur "not in" n'a pas de limites techniques. Cependant, une requête avec des milliers d'enregistrements mettra ton serveur à genoux car il doit faire un full-scan sur toute la sous-requête, donc c'est très gourmand en ressources. Tout dépend donc de ton serveur (mémoire, etc..) et de son utilisation.
Préfères donc ma méthode car elle utilise les index donc tu auras un temps de réponse divisé par 10, ce qui est préférable pour tout le monde (serveur, client, etc..).
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 21 nov. 2012 à 20:22
normalement, not in est vu exactement comme une jointure par l'interpreteur SQL donc il prend en compte les index de la même manière, lá le probléme n'est pas tant que la requtte soit longue, c'est quel ne renvoie rien et ca je ne comprend vraiment pas pourquoi.
pmcoste
Messages postés72Date d'inscriptionmercredi 7 février 2007StatutMembreDernière intervention25 juillet 20131 21 nov. 2012 à 15:55
Bonjour,
As-tu essayé la requête que je t'ai envoyé ?
Il faut de plus que tu aies un index sur les champs "titre" de tes 2 tables afin que cette requête soit la plus rapide possible
Select A.titre
From table_A as A
Left Join table_B as B on A.titre=B.titre
Where B.titre Is NULL
sihammaster
Messages postés41Date d'inscriptionsamedi 19 juillet 2008StatutMembreDernière intervention19 septembre 2013 21 nov. 2012 à 18:34
Bonjour,
Oui j'ai testé ta requête marche bien sans problèmes, mais j'ai utilisé NOT IN dans plusieurs projets et je voudrais savoir est ce que si possible de trouver une solution pour prendre une décision a cesser d'utiliser l’opérateur NOT IN et le modifier dans tous les projets une fois pour toute, et avant de prendre cette décision, je voulais savoir avant est ce qu'il ya des limitations; que NOT IN ne fonctionne pas si on a des milliers des enregistrements?
Merci.