Y a-t-il une limite dans un clause not in?

Résolu/Fermé
rjprod Messages postés 19 Date d'inscription mercredi 6 avril 2011 Statut Membre Dernière intervention 28 septembre 2017 - Modifié par jordane45 le 17/06/2015 à 10:30
rjprod Messages postés 19 Date d'inscription mercredi 6 avril 2011 Statut Membre Dernière intervention 28 septembre 2017 - 18 juin 2015 à 14:37
Bonjour,

J'ai fais une requête :
select champ1 from table1 where champ1 not in (select champ1 from table2).

De visu, je constate qu'il y a des enregistrements qui se trouve dans la table1 et qui ne sont pas dans la table2. Mais l'exécution de la requête ne donne pas ce résultat.
Dans la table2 il y a 11350 enregistrements. Donc y a t il un nombre limite d'arguments dans un "not in" clause?

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
17 juin 2015 à 13:28
Bonjour,

Tu peux essayer avec ça je pense:
SELECT champ1 
FROM table1 
WHERE champ1 NOT EXISTS (select champ1 from table2)


Sinon, encore mieux je pense, en utilisant une jointure du genre:
SELECT T1.champ1
FROM table1 T1
OUTER JOIN table2 T2 ON T2.id = T1.id

0
rjprod Messages postés 19 Date d'inscription mercredi 6 avril 2011 Statut Membre Dernière intervention 28 septembre 2017 1
Modifié par rjprod le 17/06/2015 à 15:31
Merci jordane45 pour ta réponse.
Cependant, les synthaxes que tu propose ne fonctionne pas avec MySQL.

SELECT champ1
FROM table1
WHERE champ1 NOT EXISTS (select champ1 from table2)

s'écrit plutôt comme ceci :

SELECT champ1
FROM table1
WHERE NOT EXISTS (select champ1 from table2)

Mais dans ce cas si la sous-requête ne renvoie aucune ligne alors les enregistrements dans la table1 seront listés.
0
rjprod Messages postés 19 Date d'inscription mercredi 6 avril 2011 Statut Membre Dernière intervention 28 septembre 2017 1
18 juin 2015 à 13:36
J'ai résolu le problème.
J'ai réduit le nombre d'argument dans le "not in" clause en cherchant la correspondance entre la table1 et table2 càd :

SELECT champ1
FROM table1
WHERE champ1 NOT IN (SELECT champ1 FROM table1 INNER JOIN table2 ON table1.champ1 = table2.champ1);

Ainsi, seul les enregistrements se trouvant à la fois dans la table1 et table2 seront balayé par le "not in" clause.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 juin 2015 à 13:56
Tu as testé avec le OUTER JOIN que je t'avais proposé ?
Car je pense que ça suffisait...
0
rjprod Messages postés 19 Date d'inscription mercredi 6 avril 2011 Statut Membre Dernière intervention 28 septembre 2017 1
18 juin 2015 à 14:37
OUTER JOIN engendre un erreur de syntaxe sur MySQL.
Mais c'est grâce à tes propositions que j'ai pu résoudre le problème.

Merci jordane45
0