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 :

Multiple clés étrangères référencant la même clé primaire entre 2 tables


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut Multiple clés étrangères référencant la même clé primaire entre 2 tables
    Bonjour,

    J'ai le problème suivant. En utilsant Base d'oOo (mais cela n'a pas d'importance).

    J'ai une table Film qui a pour clé primaire: idFilm et comme clés étrangères : "langue" et "soustitre" qui tous les deux sont un identifiants.

    Cet identifiant pointe vers une autre table Langue:
    - clé primaire : idLangue
    - champ: Langie (Anglais, Allemand, ...)

    Mon problème est le suivant. J'ai réussi à définir mes deux clés étrangères dans la table Film. Par contre, je n'arrive pas à créer la table à partir d'une requête me permettant d'afficher:
    - une colonne film
    - une colonne langue (pas l'identifiant) mais la langue
    - une colonne sous-titre (idem)

    Je peux faire soit l'un soit l'autre (langue ou sous-titre) mais pas les deux. Quelle est la commande SQL à taper ?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 930
    Points
    52 930
    Billets dans le blog
    5
    Par défaut
    Commencez par décrire vos tables sour forme d'ordre CREATE TABLE SQL.
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Le problème est que les tables ont été créés avec Base. Donc je n'ai pas le code SQL.
    Je peux mettre un schéma par contre:
    modele

    Ensuite j'ai rajouté les clés étrangères manuellement avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE "Film" ADD FOREIGN KEY  ("Langue") REFERENCES "Langue" ("idLangue")
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE "Film" ADD FOREIGN KEY  ("Soustitre") REFERENCES "Langue" ("idLangue")

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    J'ai trouvé une solution en faisant une requête intermédiaire : la première lie seulement Langue à la table Langue. La deuxième lie Soustitre à la table Langue.
    En SQL ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LangueTest = SELECT "Film"."Titre", "Film"."Année", "Film"."Réalisateur", "Langue"."langue" AS "Langue", "Film"."Soustitre" FROM "Langue", "Film" WHERE ( "Langue"."idLangue" = "Film"."Langue" )
     
    SELECT "LangueTest"."Titre", "LangueTest"."Année", "LangueTest"."Réalisateur", "LangueTest"."Langue", "Langue"."langue" AS "Sous-titre" FROM "Langue", "LangueTest" WHERE ( "Langue"."idLangue" = "LangueTest"."Soustitre" )
    Est-ce une bonne solution ? J'en doute. En tout cas ca marche, donc je suis déjà assez content d'avoir trouvé ça tout seul. Si quelqu un a une meilleure idée, je suis preneur.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Je comprend pas comment ton sous titre qui doit etre une chaine de caractères,
    peut référencer un identifant de langue (Le retour=FRA) ?

    J'ai peut etre pas compris ce que tu voulais faire.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Salut

    Non mon sous-titre, comme montré sur le schéma est un entier qui est lié à idLangue. Regarde encore le modèle de la base, tu comprendras.
    Ex: Film1: titre, langue=1, sous-titre=3

    Langue: 1, francais;
    2, anglais
    3, allemand

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Ok je vien de comprendre,

    Il sagit en fait des sous-titres disponible pour le film et non pas le sous-titre du film.

    Toute mes excuses.

    Essai ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT f.titre,l.langue,s.langue
    from film f
           join langue l on f.Langue=l.idLangue
           join langue s on f.Soustitre=s.idLangue
    Il faut que tu indique au SGBD qu'il sagit de deux jointures differentes.

    Voila

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Cela ne marche pas apparemment




    J'ai réussi en tapant la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT f."Titre",l."langue",s."langue"
    FROM "Film" f, "Langue" l,"Langue" s
    WHERE (f."Langue"=l."idLangue") AND (f."Soustitre"=s."idLangue")


    Aurais-je mal compris la requête ci-dessus ?

    Merci d'avance pour tous vos conseils

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Le resultat devrait être le même, je comprend pas bien.

    Si quelqu'un peut nous expliquer la difference.

    en attendant tu peux allez voir ici, pour les jointures.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Salut

    A la place de JOIN il faut mettre INNER JOIN sous Base d'oOo ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT f.titre,l.langue,s.langue
    FROM film f
          INNER JOIN langue l ON f.Langue=l.idLangue
          INNER JOIN langue s ON f.Soustitre=s.idLangue

Discussions similaires

  1. Clés étrangères d'une même table
    Par Ellyy dans le forum Modélisation
    Réponses: 1
    Dernier message: 13/04/2012, 10h39
  2. 2 clés étrangères sur la même table et même attribut
    Par jinar dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/04/2009, 22h55
  3. 2 clés étrangères sur le même champs
    Par titouille dans le forum MySQL
    Réponses: 1
    Dernier message: 29/10/2008, 12h51
  4. MCD->MPD : deux clés étrangères pour le même champ
    Par Eric2000 dans le forum Schéma
    Réponses: 3
    Dernier message: 04/09/2007, 00h44
  5. Réponses: 2
    Dernier message: 31/05/2006, 17h52

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