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 :

Jointure sur clé avec préfixe


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut Jointure sur clé avec préfixe
    Bonjour,

    je suis confronté à une structure de table un peu particulière.
    J'ai 2 tables dont je souhaite extraire les données. Une première table nommée Produits contient un ID, un libellé + d'autres données et la deuxième contient une clé composée d'un préfixe 'PRODUIT:' + l'ID de la ligne de la table produit associée
    Pouvez vous s'il vous plait m'indiquer comment faire une jointure entre ces 2 tables ?

    Bonne journée

    Nom : table2.JPG
Affichages : 136
Taille : 20,6 KoNom : Tab1.JPG
Affichages : 142
Taille : 37,6 Ko

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Techniquement c'est simple, il faut faire un substring de la colonne contenant le produit (syntaxe variable selon le SGBD)
    Le problème est que ce faisant, la requête sera non sargable : aucun index ne sera éligible et les performances seront très mauvaises si le volume est conséquent.
    Stocker ce genre de valeur dans une seule colonne est une hérésie et vous en subissez les conséquences

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Merci pour l'indice, voici ou je suis arrivé de ma requête SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT Produits.Code, Produits.Libelle, BaseProduits.DelaiDeConservation 
    FROM BaseProduits AS BaseProduits, Produits AS produits
    WHERE BaseProduits.Numero = Produits.Numero AND Produits.Code LIKE ( 'P%' ) 
    	   AND Produits.Numero IN 
    	    ( SELECT REPLACE( cle, 'PRODUIT:', '' ) 
    	    FROM indicesRevision 
    	    WHERE daterevision >= '20210519' AND cle NOT LIKE 'HACCP%' ) 
     
    ORDER BY Code DESC
    J'ai remplacé SUBSTRING car je ne connais pas la longueur de l'ID et le préfixe change selon l'origine des valeurs donc j'ai préféré un REPLACE. Ca fonctionne :
    Nom : resultat.JPG
Affichages : 123
Taille : 41,8 Ko

    Par contre lorsque je cherche à ajouter la note de révision, ça ne retourne plus rien, voici la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT Produits.Code, Produits.Libelle, BaseProduits.DelaiDeConservation, IndicesRevision.Notes
    FROM BaseProduits, Produits
    INNER JOIN IndicesRevision On( Produits.Code = REPLACE( IndicesRevision.Cle, 'PRODUIT:', '' ))
     
    WHERE BaseProduits.Numero = Produits.Numero AND Produits.Code LIKE ( 'P%' ) 
    	AND Produits.Numero IN 
    	( SELECT REPLACE( cle, 'PRODUIT:', '' ) 
    	FROM indicesRevision 
    	WHERE daterevision >= '20210519' AND cle NOT LIKE 'HACCP%' ) 
     
    ORDER BY Code DESC
    Merci encore pour votre aide.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si une telle jointure doit être utilisée très souvent sur cette table, cela vaudrait peut-être la peine de repenser sa structure pour avoir deux colonnes distinctes pour le préfixe et le code.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Non ce n'est pas le cas, je n'ai pas la possibilité de changer la structure de cette table car elle est utilisée par un ERP.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Cette modélisation est un viol de première forme normale : la colonne contient deux données au lieu d'une seule.
    Il aurait suffit de créer deux colonnes pour éviter cette difficulté et respecter la 1NF.
    Très inquiétant quant à la qualité de cet ERP... Mais sans surprise, c'est malheureusement courant et à chaque fois lourd de conséquences

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Nom : heretique.jpg
Affichages : 117
Taille : 7,1 Ko

Discussions similaires

  1. Jointure sur date avec valeur null possible
    Par Wazzouille dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 06/04/2016, 16h28
  2. jointure sur champ avec multiple valeur
    Par robert_trudel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/05/2007, 17h40
  3. Réponses: 1
    Dernier message: 23/08/2006, 14h11
  4. Update dans SYBASE avec jointure sur 2 colonnes
    Par metheorn dans le forum Sybase
    Réponses: 2
    Dernier message: 24/06/2005, 16h51
  5. [FB1.5]Vue avec jointure sur tables ?
    Par Sitting Bull dans le forum SQL
    Réponses: 2
    Dernier message: 07/12/2004, 17h07

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