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

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    5 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 5 273
    Points : 13 932
    Points
    13 932

    Par défaut Jointure sur champs non atomique

    Bonjour à tous,

    j'ai l'immense joie (-_-') de devoir travailler sur des tables de l'ERP CEGID. Ces tables comportent des champs libres qui sont utilisés pour un peu tout et n'importe quoi ensuite.

    J'ai une table qui possède une liste de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CC_TYPE,CC_CODE,CC_LIBELLE FROM CHOIXCOD;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CC_TYPE;CC_CODE;CC_LIBELLE
    --------------------------------------
    R1B;001;Libelle1
    R1B;002;Libelle2
    ....
    Ces codes sont ensuite associés à certaines lignes de données de la pire des manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT RD1_RD1LIBMUL0 FROM ACTIONS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RD1_RD1LIBMUL0
    --------------------------------------
    001;002;
    001;
    001;002;003;
    ....
    Ma question est donc la suivante : Est il possible de faire une jointure sur CHOIXCOD pour obtenir les labels à la place des codes ? Peut être faire un espèce de split avant ?

    L'idée est d’éviter de le faire dans le code si possible.

    Note : Je n'ai évidemment aucun contrôle sur ces tables et leur architecture
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    4 988
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 4 988
    Points : 10 221
    Points
    10 221

    Par défaut

    Bonjour,
    Citation Envoyé par grunk Voir le message
    Ma question est donc la suivante : Est il possible de faire une jointure sur CHOIXCOD pour obtenir les labels à la place des codes ? Peut être faire un espèce de split avant ?
    Oui, le split est une solution, avec STRING_SPLIT si vous êtes en 2016, sinon, à l'ancienne (xml ou autre).

    Une alternative avec un LIKE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 
    	   RD1_RD1LIBMUL0
        ,   CC_CODE
        ,   CC_LIBELLE
    FROM ACTIONS	 AS A
    INNER JOIN CHOIXCOD AS C	   
        ON  CONCAT(';' , A.RD1_RD1LIBMUL0) LIKE CONCAT('%;' , CC_CODE , ';%')
    Dans les deux cas, les perf risquent d'être très mauvaises.
    Vous pouvez éventuellement créer (si vous en avez les droits) une vue indexée pour pallier le problème de perf...

Discussions similaires

  1. Jointures sur table de liaison (n-n) renvoie des doublons
    Par MICHEL_R dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2008, 15h34
  2. Réponses: 2
    Dernier message: 27/02/2007, 11h33
  3. Réponses: 3
    Dernier message: 09/11/2006, 00h04
  4. [FB1.5]Vue avec jointure sur tables ?
    Par Sitting Bull dans le forum SQL
    Réponses: 2
    Dernier message: 07/12/2004, 18h07
  5. jointure sur table et procedure stocké
    Par pram dans le forum SQL
    Réponses: 3
    Dernier message: 18/11/2004, 22h56

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