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 :

Problème jointure SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Par défaut Problème jointure SQL
    Bonjour,

    j'ai un problème avec la jointure de ma requête sql.
    J'ai une tableA avec les champs :
    - EF5USI
    - EF5ART
    - EF5TIS
    - EF5RES
    - EF5DUR
    - EF5DAT
    - EF5PDA
    - EF5CRU
    - EF5CRD
    - EF5MAJ
    - EF5MJU
    - EF5SUP
    - EF5SUU
    - EF5COM

    Et j'ai une tableB avec les champs :
    - CODE
    - NSITE
    - NUSINE
    - NARTICLE
    - NCONDI
    - CADENCE
    - ACTIF

    J'aimerais faire une jointure sur site, usine, article et condi (j'ai les équivalent dans la tableA) sauf que dans la tableA par exemple le site 14 et usine 04 il est stocker dans EF5USI sous la forme 1404 et dans la tableB il y as nSite=14 et nUsine=04. Le fonctionnement est le même pour article et conditionnement. J’espère avoir bien expliquer se que contienne mes tables.

    J'aimerais donc avoir tout se qu'il y a dans la tableA mais également dans la tableB en regroupant sur site, usine, article et conditionnement.

    Je vous donne donc se que j'ai écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    SELECT * 
     
     FROM chemin.tableA a
      LEFT JOIN chemin.tableB B ON B.NSITE = 
      CAST( TRIM(LEADING '0' FROM 
      CASE 
     	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 1, 1)  
     	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 1, 2)  
     END ) AS int)
      AND B.NUSINE = 
      CAST( TRIM(LEADING '0' FROM 
      CASE 
     	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 2, 4)  
     	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 3, 4)  
     END ) AS int)
       AND B.NARTICLE = 
      CAST( TRIM(LEADING '0' FROM SUBSTR(TRIM(EF5ART), 1, 4) ) AS int)
       AND B.NCONDI =
      CAST( TRIM(LEADING '0' FROM 
      CASE 
     	WHEN LENGTH(TRIM(ef5art))=7 THEN SUBSTR(TRIM(ef5art), 4, 7)  
     	WHEN LENGTH(TRIM(ef5art))=6 THEN SUBSTR(TRIM(ef5art), 4, 6)  
     END ) AS int)
     
     WHERE ef5dat = 20181008 AND ef5usi =  0104
    Je cherche donc se que j'ai pour la date 20181008 pour le site 1 et l'usine 4.

    Mon résultat, je vous met la première ligne :

    Nom : sql.PNG
Affichages : 170
Taille : 23,7 Ko
    Nom : sql2.PNG
Affichages : 166
Taille : 8,3 Ko

    On peut voir que tout les champs de la tableB sont égal à null. C'est que ma jointure est fausse?

    Quand dans mon select je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CAST( TRIM(LEADING '0' FROM 
     CASE 
     	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 1, 1)  
     	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 1, 2)  
     END) AS int), 
     CAST( TRIM(LEADING '0' FROM
     CASE 
     	WHEN LENGTH(TRIM(ef5usi))=3 THEN SUBSTR(TRIM(ef5usi), 2, 4)  
     	WHEN LENGTH(TRIM(ef5usi))=4 THEN SUBSTR(TRIM(ef5usi), 3, 4)  
     END) AS int),
     CAST( TRIM(LEADING '0' FROM  SUBSTR(TRIM(EF5ART), 1, 4)) AS int),  
     CAST( TRIM(LEADING '0' FROM 
     CASE 
     	WHEN LENGTH(TRIM(ef5art))=7 THEN SUBSTR(TRIM(ef5art), 4, 7)  
     	WHEN LENGTH(TRIM(ef5art))=6 THEN SUBSTR(TRIM(ef5art), 4, 6)  
     END) AS int)
    Je trouve les bonnes valeur pourtant.

    Nom : sql3.PNG
Affichages : 167
Taille : 2,1 Ko

    Dans la tableB il y a bien les données qu'il faut également :

    Nom : sql4.PNG
Affichages : 170
Taille : 3,9 Ko

    Est ce que vous seriez me dire si ma jointure à l'air d'être bonne ? Car je suis un peut perdu.

    Merci,

    Cordialement,

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 561
    Par défaut
    Bonjour,
    Pourquoi ne pas partir dans l'autre sens: fusionner les valeurs des colonnes de tableB, et faire la jointure sur la colonne correspondante de tableA ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select 1
    from TableA
    inner join TableB on TableA.ColX = TableB.ColY || tableB.ColZ

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Par défaut
    Problème résolus merci pour l'aide.
    J'ai modifier ma requête qui enlève les "0" pour y mettre à la place un cast( expression AS int).
    Puis j'avais également un petit problème au niveau de mes SUBSTRING.

    Merci,
    Cordialement,

    PS : Peut on mettre le post en résolu nous même ? Si oui comment faire ? Merci.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    PS : Peut on mettre le post en résolu nous même ? Si oui comment faire ? Merci.
    il suffit de cliquer sur le bouton sous la discussion.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Problème jointure SQL Server
    Par tfc3146 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/08/2011, 20h26
  2. Problème de jointure SQL
    Par TigerCX dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/04/2008, 03h23
  3. VB5 Problème de jointure SQL
    Par lunab54 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/02/2008, 15h48
  4. SQL + VBA (problème jointure)
    Par zilfana63 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 31/01/2008, 20h04
  5. [SQL] problème de variable tableau PHP contenant les données d'une jointure SQL
    Par Schpountz42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 05h59

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