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 :

Intersection par exists


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Points : 55
    Points
    55
    Par défaut Intersection par exists
    Bonjour,
    j'ai un souci avec une requête :
    J'essaie de sortir une liste d'individus (code_indiv, nom, prénom, num_ident, etc.).
    Cette liste d'individus doit être l'intersection ( des code_indiv) de deux listes d'individus(obtenues par les requete 1 et 2) qui n'ont pas les mêmes champs et sont donc différentes (donc l’utilisation de intersec n’est pas envisageable ?)

    Je souhaiterais savoir si il est possible d'utiliser Exists dans l'une des deux requêtes pour récupérer les code_indiv
    et ainsi faire l'intersection de ces code_indiv.

    J'ai essayé de constituer ma requete comme ci-dessous mais cela ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select code_indiv, nom, prénom, num_ident, produit_1, etc  
    from tables_requete1   
    where 
    condition_requete1 
    and 
    exists(select code_indiv from tables_requete2 where  conditions_requete2)


    Voila merci
    A+

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    La requête compléte nous aidera mieux pour t'apporter un soutien

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pepitoluna Voir le message
    Cette liste d'individus doit être l'intersection ( des code_indiv) de deux listes d'individus(obtenues par les requete 1 et 2) qui n'ont pas les mêmes champs et sont donc différentes (donc l’utilisation de intersec n’est pas envisageable ?)
    Tu peux mettre des alias pour avoir les même noms de champs et les ordonner pour que les deux sous-requêtes soient cohérentes.

  4. #4
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Points : 55
    Points
    55
    Par défaut
    Voici la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT   DISTINCT INDI,NOM,PREN,DATENAIS,ADRE1, PRODINTE.LIBL, NOMETYPEACTN.LIBL,TYPPAR.LIBL,TPAIND.VALE,
     
    FROM
     INDIVI  INDIBENEINTE LEFT OUTER JOIN
      TPAIND ON  INDIBENEINTE.INDI=TPAIND.INDI
      LEFT OUTER JOIN TYPPAR ON  (condition )
      LEFT OUTER JOIN   PERI_1  PERI_1BENE   ON  (condition)
      LEFT OUTER JOIN    INTERV                ON     ( condition )
      LEFT OUTER JOIN   PRODUI  PRODINTE       ON  ( condition )
      LEFT OUTER JOIN SUIAPP  SUIAPP_ACTION    ON (condition)
      LEFT OUTER JOIN ACTION                   ON  (condition)
      LEFT OUTER JOIN NOMENC  NOMETYPEACTN     ON  (condition) 
    ADRESS_INDIBENE 
     
    WHERE
     
    exists 
    (
     SELECT   DISTINCT
      INDI
    FROM
      INDIVI  INDIBENEINTE LEFT OUTER JOIN
      TPAIND ON  INDIBENEINTE.INDI=TPAIND.INDI
      LEFT OUTER JOIN   PERI_1  PERI_1BENE     ON  (condition2)
      LEFT OUTER JOIN   INTERV                 ON     (condition2)
      LEFT OUTER JOIN   PRODUI  PRODINTE       ON  (condition2)
      LEFT OUTER JOIN SUIAPP  SUIAPP_ACTION    ON (condition2)
      LEFT OUTER JOIN ACTION                   ON  (condition2)
      LEFT OUTER JOIN NOMENC  NOMETYPEACTN     ON  (condition2) 
     
    WHERE
    CONDITION REQUETE 2) 
     
      AND   CONDITIONS REQUETES 1

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Citation Envoyé par pepitoluna Voir le message
    Cette liste d'individus doit être l'intersection ( des code_indiv) de deux listes d'individus(obtenues par les requete 1 et 2) qui n'ont pas les mêmes champs et sont donc différentes (donc l’utilisation de intersec n’est pas envisageable ?)
    Intersect n'est pas envisageable, mais MINUS semble adapté.

  6. #6
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Points : 55
    Points
    55
    Par défaut
    Le minus ne pose-t-il pas le meme probleme que l'utilisation du Intersect à savoir la necessité d'avoir les lignes constituées des memes champs et résultats?
    Mon souhait est d'afficher les resutats(requete 1) dans lesquels sont présent uniquement les codes_indiv trouvées et recupérées par le biais d'une requete 2.
    Je ne sais pas si Minus me permettrai d'afficher une telle liste
    Voila merci

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Minus vous donnera la différence en terme de données.
    Par exemple, {A,B,C} MINUS {B,D} vous donne {A,C}.

    Edit : Ok j'ai compris en relisant l'exemple, vous n'avez pas le même nombre de colonnes. Effectivement, minus est donc inapplicable.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    il faut joindre vos requêtes 1 et 2 dans votre clause EXISTS, sinon ça ne fonctionnera pas.
    Les requêtes 1 et 2 complètes nous permettrait d'y voir plus clair.
    Edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT DISTINCT INDI,NOM,PREN,DATENAIS,ADRE1, PRODINTE.LIBL, NOMETYPEACTN.LIBL,TYPPAR.LIBL,TPAIND.VALE,
    FROM INDIVI INDIBENEINTE 
    LEFT OUTER JOIN TPAIND ON INDIBENEINTE.INDI=TPAIND.INDI
    LEFT OUTER JOIN TYPPAR ON (condition )
    LEFT OUTER JOIN PERI_1 PERI_1BENE ON (condition)
    LEFT OUTER JOIN INTERV ON ( condition )
    LEFT OUTER JOIN PRODUI PRODINTE ON ( condition )
    LEFT OUTER JOIN SUIAPP SUIAPP_ACTION ON (condition)
    LEFT OUTER JOIN ACTION ON (condition)
    LEFT OUTER JOIN NOMENC NOMETYPEACTN ON (condition)
    WHERE
    EXISTS
    (
     SELECT *
     FROM INDIVI INDIBENEINTE_2 
     LEFT OUTER JOIN TPAIND ON INDIBENEINTE_2.INDI=TPAIND.INDI
     LEFT OUTER JOIN PERI_1 PERI_1BENE ON (condition2)
     LEFT OUTER JOIN INTERV ON (condition2)
     LEFT OUTER JOIN PRODUI PRODINTE ON (condition2)
     LEFT OUTER JOIN SUIAPP SUIAPP_ACTION ON (condition2)
     LEFT OUTER JOIN ACTION ON (condition2)
     LEFT OUTER JOIN NOMENC NOMETYPEACTN ON (condition2)
     WHERE CONDITION REQUETE 2
     AND INDIBENEINTE.INDI = INDIBENEINTE_2.INDI
    )
    AND CONDITIONS REQUETES 1
    La requête comme vous l'aviez formulée aurait necessité "INDIBENEINTE.INDI IN " à la place de "EXISTS".

  9. #9
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Points : 55
    Points
    55
    Par défaut
    merci Spina et les autres.
    Les deux solutions de Spina (exists et In) fonctionnent.
    MERCI A+

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

Discussions similaires

  1. requete SQL intersect/not exist
    Par Baldric de Dol dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/10/2008, 17h18
  2. valeur par défaut d'un formulaire = champ existant
    Par wes bordeaux dans le forum Access
    Réponses: 1
    Dernier message: 10/02/2007, 18h08
  3. Réponses: 3
    Dernier message: 30/09/2006, 19h09
  4. Surface du polygone formé par l'intersection d'un plan et d'un cube unitaire
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 08/09/2006, 10h05
  5. Réponses: 4
    Dernier message: 23/11/2005, 13h04

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