IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Sous-requêtes avec IN et NOT IN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut Sous-requêtes avec IN et NOT IN
    Bonjour,

    Je vous expose mon problème qui me laisse fortement perplexe, ça fait plus d'une heure que je me casse la tête sur 5 lignes de code sans rien y comprendre...

    La requête :

    SELECT distinct Q.x
    FROM out_x Q
    WHERE (Q.x NOT IN (SELECT y FROM sim_y)
    or Q.x IN (SELECT y FROM sim_y));

    me retourne 5729 rows

    alors que la requête:

    select distinct x
    from out_x;

    me retourne 9166 rows


    Evidement là c'est juste pour un test, le code de la première query n'étant pas intéressant en tant que tel... mais je dois peupler la table sim_y à l'aide de out_x en untilisant la sous_query not in, certains records passent bien mais d'autres pas et je ne parviens pas à comprendre.... d'où ma tentative d'écrire la même chose avec ou sans sous-requête qui devrait ici ne rien changer mais qui me donne plus de 3000 ligne d'écart.

    Toute aide sera la bienvenue.

    Merci

  2. #2
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut
    Salut,
    Je ne sais pas si j'ai bien compris mais as tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT distinct Q.x
    FROM out_x Q
    WHERE NOT EXISTS (
    SELECT 1 FROM sim_y R
    WHERE Q.x = R.y);
    J'ai repris ton DISTINCT mais es-tu sûr que c'est pas ça qui fausse ton nombre de lignes ?
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut
    Un tout grand merci à toi, avec ça mon script marche et en plus j'y ai évidement gagné en temps d'exécution!

    (ne sais tu pas par hasard pourquoi avec la sous-query ça n'allait pas? J'ai du mal à accepter sans comprendre...)

  4. #4
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut
    Difficile de te répondre ...
    As tu regardé si tu as des null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM  out_x  WHERE x IS NULL;
    Et où crois tu que se trouvent ces enregistrements
    dans IN (SELECT ....
    dans NOT (IN SELECT...
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut
    J'ai bien des null... mais à partir du moment où je fais un distinct, ça ne me rajoute qu'une seule ligne... pas 3000...

    Les records qui me manquent doivent se trouver dans le not in. En fait mon prob est que j'alimentais la table sim_y avec la table out_x en insérant que les records pour lesquels j'avais un ID qui n'existait pas encore dans la table cible... Or certains ne s'y retrouvaient jamais...

    J'ai donc fait les tests et remarqué que bien que dans la première table et pas dans la deuxième la requête select de ce qui était dans la première avec un Not IN de la 2ème ne renvoyait aucune row...

  6. #6
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Essaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct x
    from out_x
    minus
    SELECT distinct Q.x
    FROM out_x Q
    WHERE (Q.x NOT IN (SELECT y FROM sim_y) 
    or Q.x IN (SELECT y FROM sim_y));
    cela permettra d'isoler les lignes posant problèmes et peut-être de comprendre d'où cela provient

Discussions similaires

  1. sous-requête avec not null
    Par sky_perrinos dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/09/2014, 14h01
  2. Une sous-requête avec NOT IN qui me cause du souci
    Par annedeblois dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 23/09/2008, 14h56
  3. Sous requête avec plusieurs retours
    Par grunk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/10/2007, 13h57
  4. sous requête avec liste
    Par illegalsene dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/05/2007, 12h11
  5. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo