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 :

Gestion d'une clé étrangère dans une requête SQL


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Gestion d'une clé étrangère dans une requête SQL
    Bonjour, j'ai une requête SQL (je suis sur qui est très simple) que je n'arrive pas à aboutir.

    Ma requête est simple : Affiché en une seule colonne le nom de la région et les lignes suivantes les noms de ces départements dont elle est composée.

    Par exemple :

    Alsace
    Bas-Rhin
    Haut-Rhin
    Aquitaine
    Dordogne
    Gironde
    Landes
    Lot-et-Garonne
    Pyrénées-Atlantiques
    ...

    J'ai 2 tables, Region et Departements :

    DEPARTEMENTS (num_Dep, lib_Dep, #id_Reg)
    REGION (id_Reg, libelle_Reg)

    Pour l'instant j'ai pu réunir les régions d'un coté, les départements de l'autre avec un UNION mais pas moyen de les agencer de telle façon que je veux.

    Une ame charitable pour m'aider ?

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 459
    Points
    28 459
    Par défaut
    Montre nous la requête que tu as commencée. Nous t'aiderons à la corriger.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select id_reg, libelle_Reg 
    from Reg 
    group by id_reg, libelle_reg 
    union 
    select id_Reg, lib_Dep 
    from Dep 
    group by id_Reg, lib_Dep
    J'ai mis id_Reg pour bien vérifier les 2 champs, mais si il y avait possibilité de n'afficher que le champ du libellé sa serait nickel.

    Merci

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Essaie ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT   NVL (libelle_reg, lib_dep) DEPT_REGION
        FROM departements, region
       WHERE departements.id_reg = region.id_reg
    GROUP BY ROLLUP (libelle_reg), departements.id_reg, departements.lib_dep
    ORDER BY departements.id_reg, libelle_reg NULLS FIRST
    Démonstration
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    COLUMN dept_region format a30
    WITH departements AS
         (SELECT 'Alsace' lib_dep, 1 id_reg
            FROM DUAL
          UNION ALL
          SELECT 'Paris' lib_dep, 2 id_reg
            FROM DUAL),
         region AS
         (SELECT 1 id_reg, 'Bas-Rhin' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Haut-Rhin' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Aquitaine' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Dordogne' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Gironde' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Landes' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Lot-et-Garonne' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 1 id_reg, 'Pyrénées-Atlantiques' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 2 id_reg, 'Paris1' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 2 id_reg, 'Paris2' libelle_reg
            FROM DUAL
          UNION ALL
          SELECT 2 id_reg, 'Paris3' libelle_reg
            FROM DUAL)
    SELECT   NVL (libelle_reg, lib_dep) dept_region
        FROM departements, region
       WHERE departements.id_reg = region.id_reg
    GROUP BY ROLLUP (libelle_reg), departements.id_reg, departements.lib_dep
    ORDER BY departements.id_reg, libelle_reg NULLS FIRST
     
    DEPT_REGION                   
    ------------------------------
    Alsace                        
    Aquitaine                     
    Bas-Rhin                      
    Dordogne                      
    Gironde                       
    Haut-Rhin                     
    Landes                        
    Lot-et-Garonne                
    Pyrénées-Atlantiques          
    Paris                         
    Paris1                        
    Paris2                        
    Paris3                        
     
     
    13 rows selected.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ça à l'air de marcher sur Oracle merci beaucoup ! Par contre un ami qui lui veut utiliser SQL Server aimerait déployer cette même requête. Que faudrait-il changer car je n'ai rien trouvé en équivalent ROLLUP.

    Merci

  6. #6
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Un Rollup se remplace par des Union All. Mais il faut construire une clé de tri pour préserver le bon ordre.
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> WITH departements AS(
      2    SELECT 'Alsace' lib_dep, 1 id_reg
      3      FROM DUAL
      4    UNION ALL
      5    SELECT 'Paris' lib_dep, 2 id_reg
      6      FROM DUAL
      7  ), region AS (
      8    SELECT 1 id_reg, 'Bas-Rhin' libelle_reg
      9      FROM DUAL
     10    UNION ALL
     11    SELECT 1 id_reg, 'Haut-Rhin' libelle_reg
     12      FROM DUAL
     13    UNION ALL
     14    SELECT 1 id_reg, 'Aquitaine' libelle_reg
     15      FROM DUAL
     16    UNION ALL
     17    SELECT 1 id_reg, 'Dordogne' libelle_reg
     18      FROM DUAL
     19    UNION ALL
     20    SELECT 1 id_reg, 'Gironde' libelle_reg
     21      FROM DUAL
     22    UNION ALL
     23    SELECT 1 id_reg, 'Landes' libelle_reg
     24      FROM DUAL
     25    UNION ALL
     26    SELECT 1 id_reg, 'Lot-et-Garonne' libelle_reg
     27      FROM DUAL
     28    UNION ALL
     29    SELECT 1 id_reg, 'Pyrénées-Atlantiques' libelle_reg
     30      FROM DUAL
     31    UNION ALL
     32    SELECT 2 id_reg, 'Paris1' libelle_reg
     33      FROM DUAL
     34    UNION ALL
     35    SELECT 2 id_reg, 'Paris2' libelle_reg
     36      FROM DUAL
     37    UNION ALL
     38    SELECT 2 id_reg, 'Paris3' libelle_reg
     39      FROM DUAL
     40  ), Agg_Data As (
     41    Select id_reg, lib_dep, 0 as tri
     42      from departements
     43    Union All
     44    Select id_reg, libelle_reg, 1 as tri
     45      from region
     46  )
     47  Select lib_dep
     48    From agg_data
     49   Order By id_reg, tri, lib_dep
     50  /
     
    LIB_DEP
    --------------------
    Alsace
    Aquitaine
    Bas-Rhin
    Dordogne
    Gironde
    Haut-Rhin
    Landes
    Lot-et-Garonne
    Pyrénées-Atlantiques
    Paris
    Paris1
    Paris2
    Paris3
     
    13 rows selected
     
    SQL>

  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 391
    Points
    18 391
    Par défaut
    Citation Envoyé par Mrplantu Voir le message
    Ça à l'air de marcher sur Oracle merci beaucoup ! Par contre un ami qui lui veut utiliser SQL Server aimerait déployer cette même requête. Que faudrait-il changer car je n'ai rien trouvé en équivalent ROLLUP.
    Sur SQL-Server 2005+ rollup existe mais la syntaxe est différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY <les_colonnes> WITH ROLLUP

Discussions similaires

  1. Gestion d'une clé étrangère dans une requête SQL
    Par Mrplantu dans le forum Développement
    Réponses: 3
    Dernier message: 18/05/2012, 14h01
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. comment ajouter une clé étrangère dans une table
    Par une_tite_question dans le forum Débuter
    Réponses: 6
    Dernier message: 09/05/2008, 07h14
  4. Réponses: 4
    Dernier message: 13/11/2007, 22h23
  5. Definir une clé étrangère dans une table existante?
    Par gui38 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h54

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