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

Oracle Discussion :

[Oracle 10G] Filtrer une requête en fonction d'une autre table


Sujet :

Oracle

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut [Oracle 10G] Filtrer une requête en fonction d'une autre table
    Bonjour,

    Je cherche à constituer une liste des personnes en realisant un select sur une table personne, jusque la rien de complexe.

    Maintenant je cherche à filtrer ma liste en fonction de la présence ou non de cette personne dans une autre table (inscription par exemple).

    J'ai quelque chose comme:

    Select idPersonne,
    nomPersonne,
    ....
    From table_personne
    Where idPersonne not in (Select idPersonne from table_inscription)

    Je ne trouve pas ma requete très performante en temps d'execution. Y a t'il un moyen de faire cela de facon plus efficace ?

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 58
    Points : 61
    Points
    61
    Par défaut
    Salut :

    2 solutions plus performantes :

    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select p.idPersonne,
    p.nomPersonne,
    ....
    From table_personne p
    Where p.idPersonne not in (Select i.idPersonne from table_inscription i Where i.idPersonne = p.idPersonne)
    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select p.idPersonne,
    p.nomPersonne,
    ....
    From table_personne p
    Where not exists (Select * from table_inscription i Where i.idPersonne = p.idPersonne)
    @+

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Il y a une solution qui parfois marche bien (cas de dblink sur 1 des tables)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT idPersonne,
    nomPersonne,
    ....
    FROM table_personne 
    WHERE idpersonne IN (SELECT idpersonne FROM table_personne MINUS select idpersonne FROM table_inscription )
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Merci pour vos réponses.

    Je suis parti sur la solution du not exists

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ou plus rapide encore en passant par une jointure externe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT idPersonne,
    nomPersonne,
    ....
    FROM table_personne 
    LEFT OUTER JOIN table_inscription on table_personne.idPersonne = table_inscription.idPersonne 
    WHERE table_inscription.idPersonne  is null
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-97] Calculs dans une requête en fonction d'une variable d'un formulaire
    Par Cire37 dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/06/2010, 09h39
  2. passer d'une requêtes SGL directe en une requête normale
    Par jenniferIUP dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/02/2009, 08h26
  3. Réponses: 19
    Dernier message: 03/02/2009, 10h52
  4. Réponses: 7
    Dernier message: 17/11/2008, 11h57
  5. Réponses: 8
    Dernier message: 08/06/2007, 10h42

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