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 :

Cas d'école avec jointure


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut Cas d'école avec jointure
    Bonjour,
    voilà le topo, j'ai 2 tables :

    source (source_id, source_tag, source_projet)

    traduction (trad_id, trad_source, trad_lang)

    ou trad_source est clé étrangère de source_id.

    J'ai une condition sur source_projet et une condition sur la lang de traduction ( where source_projet=$id and trad_lang=$lang)
    mais $lang peut être égal à 0 (correspond à aucune langue).

    Sachant que les sources sont créées avant les traductions j'aimerais pouvoir remonter les source_tag même si trad_lang=0 ou null.

    Je suis partie sur un left outer join, mais çà ne me renvoi rien. Je tourne dessus depuis un ptit moment et j'en arrive à même plus comprendre ce que j veux :-). Si quelques bonnes âmes pouvaient m'aider.
    ps: SGBD->MySQL 5

    J'espère avoir était assez clair ...
    Dernière modification par Invité ; 27/10/2008 à 13h11.

  2. #2
    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 394
    Points
    18 394
    Par défaut
    Il faut effectivement faire une jointure externe. Mais il ne faut pas mettre de condition "forte" au niveau de la table traduction.
    Je pense que les deux méthodes ci-dessous fonctionnent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ...
    from
        source s
        left outer join traduction t
          on t.trad_source = s.source_id
    where
        s.source_projet=$id 
    and coalesce(t.trad_lang, $lang)=$lang
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ...
    from
        source s
        left outer join traduction t
          on t.trad_source = s.source_id
         and t.trad_lang = $lang
    where
        s.source_projet=$id

  3. #3
    Invité
    Invité(e)
    Par défaut
    Grand merci à toi !
    J'étais partie sur la deuxième requête mais je m'étais gouré dans la second condition de la jointure. Je me rends compte que j'étais trop discriminatoire dans ma condition sur trad_lang.

    Je ne connaissais pas 'coalesce' c'est compatible avec les principaux SGBD (oracle, mysql, sql server, postgres et db2) ?
    Dans le doute je vais utiliser la deuxième, encore merci, tu me retire un clou rouillé du pied !

  4. #4
    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 394
    Points
    18 394
    Par défaut
    Citation Envoyé par infameus Voir le message
    Je ne connaissais pas 'coalesce' c'est compatible avec les principaux SGBD (oracle, mysql, sql server, postgres et db2) ?
    Je réponds au moins oui pour Oracle (à partir de 9i), MySQL (à partir de 3.23) et SQL Server (au moins à partir de 2000).

    Pour PostGres et DB2 ne sachant pas j'ai googlé (ainsi que pour retrouver les versions des SGBD précédent).
    PostGres oui au moins à partir de 7.1.
    DB2 également au moins à partir de la version 8.0.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour les réponses, j'ai un peu honte de t'avoir fait googler alors que j'aurais dû le faire moi même .
    Je suis en train de développer un module de traduction TMX à intégrer dans un soft, le tout sur Zend framework. Et c'est pas encore sur que le SGBD sera MySQL, donc je me prévois un peu de marge ;-).

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/06/2014, 08h37
  2. cas d'école : Requête combinée avec test sur une colonne
    Par teuzadur dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 23/06/2011, 15h14
  3. [Novice] Cas d'école pour les jointures
    Par Loko dans le forum WinDev
    Réponses: 4
    Dernier message: 27/11/2007, 15h28
  4. Script avec JOINTURE et CASE
    Par Labienus dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/02/2004, 10h40
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33

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