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 :

Deux select dans une requete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 408
    Par défaut Deux select dans une requete
    Bonjour,

    J''essaye en vain d'imbriquer deux requestes SQL en une pour récupérer des informations dans une base oracle, elle fonctionne très bien en séparer mais pas réuni (je n'ai jamais fait encore)

    voici la première
    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
    35
    36
    SELECT 
                    INDIVIDU.INDIV_ID,
                    INDIVIDU.INDIV_NOM,
                    INDIVIDU.INDIV_PRE1,
                    INDIVIDU.INDIV_PRE2,
                    INDIVIDU.INDIV_INSEE,
                    INDIVIDU.INDIV_OPRI,
                    INDIVIDU.INDIV_SEXE,
                    INDIVIDU.INDIV_DNAIS,
                    INDIVIDU.INDIV_LNAIS,
                    INDIVIDU.INDIV_MMEDECIN,
                    INDIVIDU.INDIV_MDATE,
                    TYPE_CONTRAT.CONTRAT_LIB,
                    SITE_CLIENTS.SITE_CLIENT_LIB,
                    CATEGORIE.CAT_NOM,
                    ACTIVITE_PROF.ACTIVITE_LIB,
                    ENTREPRISE.ENT_RS,
                    ENTREPRISE.ENT_SIRET,
                    ENTREPRISE.ENT_ADR1,
                    ENTREPRISE.ENT_ADR2,
                    ENTREPRISE.ENT_CP,
                    ENTREPRISE.ENT_VILLE,
    FROM
                    SITE_CLIENTS,
                    CATEGORIE,
                    ACTIVITE_PROF,
                    ENTREPRISE,
                    TYPE_CONTRAT,
                    INDIVIDU
     
    WHERE 
    SITE_CLIENTS.SITE_CLIENT_ID = INDIVIDU.SITE_CLIENT_ID
                    AND  CATEGORIE.CAT_ID = INDIVIDU.INDIV_MCATEG
                    AND ACTIVITE_PROF.ACTIVITE_ID = INDIVIDU.ACTIVITE_ID
                    AND  ENTREPRISE.ENT_ID = INDIVIDU.ENT_ID
                    AND TYPE_CONTRAT.CONTRAT_ID = INDIVIDU.CONTRAT_ID
    la deuxième
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT ZONE.ZONE_LIB
    FROM 
                    INTERVENTION_ZONE, ZONE, INDIVIDU
    WHERE 
                    INTERVENTION_ZONE.ZONE_ID = ZONE.ZONE_ID 
                    AND INDIVIDU.INDIV_ID = INTERVENTION_ZONE.INDIV_ID
    j'ai essayé cela
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    SELECT 
    	INDIVIDU.INDIV_ID,
    	INDIVIDU.INDIV_NOM,
    	INDIVIDU.INDIV_PRE1,
    	INDIVIDU.INDIV_INSEE,
    	INDIVIDU.INDIV_SEXE,
    	INDIVIDU.INDIV_DNAIS,
    	INDIVIDU.INDIV_LNAIS,
    	INDIVIDU.INDIV_MMEDECIN,
    	INDIVIDU.INDIV_MDATE,
    	TYPE_CONTRAT.CONTRAT_LIB,
    	SITE_CLIENTS.SITE_CLIENT_LIB,
    	ZONE.ZONE_LIB,
    	CATEGORIE.CAT_NOM,
    	ACTIVITE_PROF.ACTIVITE_LIB,
    	ENTREPRISE.ENT_RS,
    	ENTREPRISE.ENT_SIRET,
    	ENTREPRISE.ENT_ADR1,
    	ENTREPRISE.ENT_ADR2,
    	ENTREPRISE.ENT_CP,
    	ENTREPRISE.ENT_VILLE
    FROM
    	SITE_CLIENTS,
    	CATEGORIE,
    	ACTIVITE_PROF,
    	ENTREPRISE,
    	TYPE_CONTRAT,
    	INDIVIDU,
    	(SELECT ZONE.ZONE_LIB Zone_lib
    	FROM 
    		INTERVENTION_ZONE, ZONE, INDIVIDU
    	WHERE 
    		INTERVENTION_ZONE.ZONE_ID = ZONE.ZONE_ID 
    		AND INDIVIDU.INDIV_ID = INTERVENTION_ZONE.INDIV_ID) Zone
     
    WHERE 
    		SITE_CLIENTS.SITE_CLIENT_ID = INDIVIDU.SITE_CLIENT_ID
    	AND 
    		CATEGORIE.CAT_ID = INDIVIDU.INDIV_MCATEG
    	AND
    		ACTIVITE_PROF.ACTIVITE_ID = INDIVIDU.ACTIVITE_ID
    	AND 
    		ENTREPRISE.ENT_ID = INDIVIDU.ENT_ID
    	AND
    		TYPE_CONTRAT.CONTRAT_ID = INDIVIDU.CONTRAT_ID
    j'ai l'impression qu'il boucle car je l'ai arreté à plus de 50 000 résultats alors que j'ai que 3200 INDIV_ID dans ma base

    merci d'avance pour votre
    bonne après midi
    Ludo

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    C'est plutôt un produit cartesian: donc il te faut ajouter aussi une condition de jointure.

  3. #3
    Membre expérimenté Avatar de mongilotti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2003
    Messages : 314
    Par défaut
    normalement ta requete et fausse car
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    SELECT 
    	INDIVIDU.INDIV_ID,
    	INDIVIDU.INDIV_NOM,
    	INDIVIDU.INDIV_PRE1,
    	INDIVIDU.INDIV_INSEE,
    	INDIVIDU.INDIV_SEXE,
    	INDIVIDU.INDIV_DNAIS,
    	INDIVIDU.INDIV_LNAIS,
    	INDIVIDU.INDIV_MMEDECIN,
    	INDIVIDU.INDIV_MDATE,
    	TYPE_CONTRAT.CONTRAT_LIB,
    	SITE_CLIENTS.SITE_CLIENT_LIB,
    	ZONE.ZONE_LIB,
    	CATEGORIE.CAT_NOM,
    	ACTIVITE_PROF.ACTIVITE_LIB,
    	ENTREPRISE.ENT_RS,
    	ENTREPRISE.ENT_SIRET,
    	ENTREPRISE.ENT_ADR1,
    	ENTREPRISE.ENT_ADR2,
    	ENTREPRISE.ENT_CP,
    	ENTREPRISE.ENT_VILLE
    FROM
    	SITE_CLIENTS,
    	CATEGORIE,
    	ACTIVITE_PROF,
    	ENTREPRISE,
    	TYPE_CONTRAT,
    	INDIVIDU,
    -- ici ton probleme
    	(SELECT ZONE.ZONE_LIB Zone_lib
    	FROM 
    		INTERVENTION_ZONE, ZONE, INDIVIDU
    	WHERE 
    		INTERVENTION_ZONE.ZONE_ID = ZONE.ZONE_ID 
    		AND INDIVIDU.INDIV_ID = INTERVENTION_ZONE.INDIV_ID) 
    Zone
    -- 
    WHERE 
    		SITE_CLIENTS.SITE_CLIENT_ID = INDIVIDU.SITE_CLIENT_ID
    	AND 
    		CATEGORIE.CAT_ID = INDIVIDU.INDIV_MCATEG
    	AND
    		ACTIVITE_PROF.ACTIVITE_ID = INDIVIDU.ACTIVITE_ID
    	AND 
    		ENTREPRISE.ENT_ID = INDIVIDU.ENT_ID
    	AND
    		TYPE_CONTRAT.CONTRAT_ID = INDIVIDU.CONTRAT_ID

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 408
    Par défaut
    oui je suis tout a fait d'accord avec la partie que tu as indiqué mais je ne sais pas comment faire

  5. #5
    Membre émérite
    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
    Par défaut
    Bonjour,

    Comme l'a dit Mnitu, vous faites un produit cartésien. Dans votre requête "Zone", il vous faut récupérer l'id de l'individu pour faire une jointure avec votre première requête.
    Et essayez d'utiliser la syntaxe normalisée pour les jointures (JOIN), c'est nettement plus lisible.

    L'ensemble de vos deux requêtes peut ressembler à ça :
    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
    SELECT 
    	INDIVIDU.INDIV_ID,
    	INDIVIDU.INDIV_NOM,
    	INDIVIDU.INDIV_PRE1,
    	INDIVIDU.INDIV_INSEE,
    	INDIVIDU.INDIV_SEXE,
    	INDIVIDU.INDIV_DNAIS,
    	INDIVIDU.INDIV_LNAIS,
    	INDIVIDU.INDIV_MMEDECIN,
    	INDIVIDU.INDIV_MDATE,
    	TYPE_CONTRAT.CONTRAT_LIB,
    	SITE_CLIENTS.SITE_CLIENT_LIB,
    	ZONE.ZONE_LIB,
    	CATEGORIE.CAT_NOM,
    	ACTIVITE_PROF.ACTIVITE_LIB,
    	ENTREPRISE.ENT_RS,
    	ENTREPRISE.ENT_SIRET,
    	ENTREPRISE.ENT_ADR1,
    	ENTREPRISE.ENT_ADR2,
    	ENTREPRISE.ENT_CP,
    	ENTREPRISE.ENT_VILLE
    FROM INDIVIDU
    INNER JOIN SITE_CLIENTS ON SITE_CLIENTS.SITE_CLIENT_ID = INDIVIDU.SITE_CLIENT_ID
    INNER JOIN CATEGORIE ON CATEGORIE.CAT_ID = INDIVIDU.INDIV_MCATEG
    INNER JOIN ACTIVITE_PROF ON ACTIVITE_PROF.ACTIVITE_ID = INDIVIDU.ACTIVITE_ID
    INNER JOIN ENTREPRISE ON ENTREPRISE.ENT_ID = INDIVIDU.ENT_ID
    INNER JOIN TYPE_CONTRAT ON TYPE_CONTRAT.CONTRAT_ID = INDIVIDU.CONTRAT_ID
    INNER JOIN INTERVENTION_ZONE ON INDIVIDU.INDIV_ID = INTERVENTION_ZONE.INDIV_ID
    INNER JOIN ZONE ON INTERVENTION_ZONE.ZONE_ID = ZONE.ZONE_ID
    Notez que vous ne récupèrerez aucune information sur un individu qui n'est pas renseigné dans l'une des tables. Si vous voulez récupérer ceux qui n'ont pas de correspondance dans INTERVENTION_ZONE par exemple, utilisez un LEFT OUTER JOIN :
    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
    SELECT 
    	INDIVIDU.INDIV_ID,
    	INDIVIDU.INDIV_NOM,
    	INDIVIDU.INDIV_PRE1,
    	INDIVIDU.INDIV_INSEE,
    	INDIVIDU.INDIV_SEXE,
    	INDIVIDU.INDIV_DNAIS,
    	INDIVIDU.INDIV_LNAIS,
    	INDIVIDU.INDIV_MMEDECIN,
    	INDIVIDU.INDIV_MDATE,
    	TYPE_CONTRAT.CONTRAT_LIB,
    	SITE_CLIENTS.SITE_CLIENT_LIB,
    	ZONE.ZONE_LIB,
    	CATEGORIE.CAT_NOM,
    	ACTIVITE_PROF.ACTIVITE_LIB,
    	ENTREPRISE.ENT_RS,
    	ENTREPRISE.ENT_SIRET,
    	ENTREPRISE.ENT_ADR1,
    	ENTREPRISE.ENT_ADR2,
    	ENTREPRISE.ENT_CP,
    	ENTREPRISE.ENT_VILLE
    FROM INDIVIDU
    INNER JOIN SITE_CLIENTS ON SITE_CLIENTS.SITE_CLIENT_ID = INDIVIDU.SITE_CLIENT_ID
    INNER JOIN CATEGORIE ON CATEGORIE.CAT_ID = INDIVIDU.INDIV_MCATEG
    INNER JOIN ACTIVITE_PROF ON ACTIVITE_PROF.ACTIVITE_ID = INDIVIDU.ACTIVITE_ID
    INNER JOIN ENTREPRISE ON ENTREPRISE.ENT_ID = INDIVIDU.ENT_ID
    INNER JOIN TYPE_CONTRAT ON TYPE_CONTRAT.CONTRAT_ID = INDIVIDU.CONTRAT_ID
    LEFT OUTER JOIN INTERVENTION_ZONE
         INNER JOIN ZONE ON INTERVENTION_ZONE.ZONE_ID = ZONE.ZONE_ID 
         ON INDIVIDU.INDIV_ID = INTERVENTION_ZONE.INDIV_ID

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 408
    Par défaut
    merci impeccable cela fonctionne avec la deuxième requete
    bonnes fetes de fin d'année

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

Discussions similaires

  1. comparer deux date dans une requete select simple
    Par isac83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/09/2007, 09h53
  2. Réponses: 2
    Dernier message: 07/08/2007, 19h48
  3. [Requete] Deux count dans une requete
    Par wperezrobles dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/10/2006, 09h17
  4. Utiliser deux bases dans une requete, possible ?
    Par compu dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2006, 14h09
  5. Choix entre deux champs dans une requete
    Par Pico10 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/07/2005, 15h36

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