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

Langage SQL Discussion :

Faire une vue faisant la jointure entre deux tables avec relation NN.


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut Faire une vue faisant la jointure entre deux tables avec relation NN.
    Bonjour, je viens vous demander un peu d'aide sur le forum SQL car je dois réaliser la vue suivante :

    ..... email ..... | ....... nom ........
    ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
    adr1@mail.com | utilisateur
    --------------------------------
    adr1@mail.com | admin
    --------------------------------
    adr2@mail.com | visiteur
    --------------------------------
    adr3@mail.com | visiteur
    --------------------------------
    adr4@mail.com | utilisateur

    Elle met en relation les utilisateurs et leur(s) groupe(s).

    Les tables en questions sont les suivantes :
    Code SQL : 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
    CREATE TABLE groupe (
        id integer NOT NULL,
        nom character varying,
        libelle character varying
    );
     
    CREATE TABLE personne (
        id integer NOT NULL,
        email character varying,
        password character varying
    );
     
    CREATE TABLE personne_groupe (
        id_personne integer,
        id_groupe integer
    );
     
     
    ALTER TABLE ONLY groupe
        ADD CONSTRAINT groupe_nom_key UNIQUE (nom);
     
    ALTER TABLE ONLY groupe
        ADD CONSTRAINT groupe_pkey PRIMARY KEY (id);
     
     
     
    ALTER TABLE ONLY personne
        ADD CONSTRAINT personne_email_key UNIQUE (email);
     
    ALTER TABLE ONLY personne
        ADD CONSTRAINT personne_pkey PRIMARY KEY (id);
     
     
     
    ALTER TABLE ONLY personne_groupe
        ADD CONSTRAINT personne_groupe_id_personne_id_groupe_key UNIQUE (id_personne, id_groupe);
     
    ALTER TABLE ONLY personne_groupe
        ADD CONSTRAINT personne_groupe_id_groupe_fkey FOREIGN KEY (id_groupe) REFERENCES groupe(id)
    	ON UPDATE CASCADE ON DELETE CASCADE;
     
    ALTER TABLE ONLY personne_groupe
        ADD CONSTRAINT personne_groupe_id_personne_fkey FOREIGN KEY (id_personne) REFERENCES personne(id)
    	ON UPDATE CASCADE ON DELETE CASCADE;
     
     
     
    CREATE SEQUENCE groupe_id_seq
        START WITH 1
        INCREMENT BY 1
        NO MINVALUE
        NO MAXVALUE
        CACHE 1;
     
    ALTER TABLE ONLY groupe ALTER COLUMN id SET DEFAULT nextval('groupe_id_seq'::regclass);
     
    CREATE SEQUENCE personne_id_seq
        START WITH 1
        INCREMENT BY 1
        NO MINVALUE
        NO MAXVALUE
        CACHE 1;
     
    ALTER TABLE ONLY personne ALTER COLUMN id SET DEFAULT nextval('personne_id_seq'::regclass);

    Je ne sais pas comment réaliser les jointures pour arriver à ce résultat.
    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Pour apprendre à faire les jointures, c'est par là :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    J'ai déjà lu le cours SQL de sqlpro. J'aurai du le mettre sur mon sujet mais je suis déjà arrivé à un premier résultat. Je ne suis pas sûr que ce soit très correcte. La table de liaison me gêne un peu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW v_personne_groupe
    AS SELECT p.email,
        g.nom
       FROM personne_groupe pg
         JOIN personne p ON pg.id_personne = p.id
         JOIN groupe g ON pg.id_groupe = g.id;

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est très bien.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    Merci ! J'avais besoin de cette confirmation pour être sur de pouvoir intégrer cette vue.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/07/2014, 13h13
  2. Jointure entre deux tables avec close WHERE
    Par redoran dans le forum Requêtes
    Réponses: 5
    Dernier message: 31/05/2012, 11h12
  3. Réponses: 4
    Dernier message: 30/06/2011, 18h55
  4. Réponses: 11
    Dernier message: 30/08/2010, 17h24
  5. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18

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