Y a-t-il une limite dans un clause not in? [Résolu/Fermé]

Signaler
Messages postés
19
Date d'inscription
mercredi 6 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2017
-
Messages postés
19
Date d'inscription
mercredi 6 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2017
-
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

Messages postés
29903
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2020
2 898
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

Messages postés
19
Date d'inscription
mercredi 6 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2017
1
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.
Messages postés
19
Date d'inscription
mercredi 6 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2017
1
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.
Messages postés
29903
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2020
2 898
Tu as testé avec le OUTER JOIN que je t'avais proposé ?
Car je pense que ça suffisait...
Messages postés
19
Date d'inscription
mercredi 6 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2017
1
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