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

MS SQL Server Discussion :

Jointure conditionnele sur plusieurs tables


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut Jointure conditionnele sur plusieurs tables
    Je me retrouve face a un probleme de taille :
    Effectuer une jointure conditionnelle sur plusieurs tables differentes en fonction d'un autre champ.

    Plus concretement :
    J'ai une table avec (entre autre) 2 champs : DocType, DocID
    Cette table reference donc des documents (via leur ID dans DocID) dont le type (dans DocType) permet de savoir comment interpreter l'ID et sur quelle table effectuer la requete pour retrouver tous les champs du document.

    Mon soucis :
    Je dois retourner une serie d'information contenu dans cette table avec (entre autre) la reference du document lié a l'ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Champ1, Champ2, REF_DOC, Champ4, Champ5
    FROM TMaTable
    Avec dans la colonne "REF_DOC" la reference du document dont ma table possede l'ID (Champ3 si vous avez bien suivi )
    Sauf que cette REF ne peut etre obtenue que par un select sur unetable precise (dependant du champs "Type Document") en lui transmettant l'ID du document dans la clause WHERE ....


    Bref, tout ca me semble bien nebuleux pour moi

  2. #2
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Je vois plusieurs options :
    1) Il faut faire la jointure entre toutes les tables et utiliser un "case" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT 
    case typedoc
    when 1 then typedoc1table.Champ1
    when 2 then typedoc2table.champ1
    end as Champ1, 
    case typedoc
    when 1 then typedoc1table.Champ2
    when 2 then typedoc2table.champ2
    end as Champ2, REF_DOC
    //etc...
    left outer join typedoc1table on //jointure
    left outer join typedoc2table on //jointure
    autre option : l'union des tables de documents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Champ1, Champ2, REF_DOC, Champ4, Champ5
    FROM TMaTable
    join (select champ1, champ2, REF_DOC, champ4, champ5, 'text' as typedoc from typedoc1table
    union
    select champ1, champ2, REF_DOC, champ4, champ5, 'img' as typedoc from typedoc2table) as doc
    where doc.REF_DOC = TMaTable.REF_DOC
    and doc.typedoc = TMaTable.typedoc

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Oki, je voyais pas la jointure dans ce sens .... Interessant.

    sinon une autre idee plus simpel m'a ete proposée : Creer une fonction qui prends pour parametre l'ID et le Type, et en interne effectue un test sur le Type et effectue le select sur la bonne table, puis retourne le resultat.

    Tellement simple quej'y ai pas pensé

    Merci pour cette autre technique

  4. #4
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    les fonctions, c'est lent ;o)p celà étant, dans ce cas, c'est p'tet plus rapide que des jointures. A voir !

  5. #5
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Bonjour

    Evitez les fonctions dans ce cas car cela transformera un traitement ensembliste en un traitement ligne à ligne et les performances seront réduites.

    Cordialement

    Christophe B.

  6. #6
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Donc plutot une vue possedant toutes les tables et un case sur la valeur de retour ?

Discussions similaires

  1. Jointure externe sur plusieurs tables
    Par Xeuch dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/08/2013, 20h12
  2. Jointure externe sur plusieurs tables
    Par huître dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/09/2011, 21h57
  3. Requete SQL jointure externe sur plusieurs tables
    Par mattmax dans le forum Développement
    Réponses: 4
    Dernier message: 28/12/2010, 10h07
  4. Probleme de Jointure imbriqué sur plusieurs tables
    Par cana13 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/06/2009, 15h44
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 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