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

WinDev Discussion :

Problème sur code de requête SQL (HExécuteRequêteSQL) [WD20]


Sujet :

WinDev

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut Problème sur code de requête SQL (HExécuteRequêteSQL)
    Bonjour à tous et Bonne année 2020 !

    Je suis confronté aujourd'hui à un petit souci dans l'écriture d'un code sql de sélection d'enregistrements ou on a 2 "id utilisateur" pour "saisi par" et "modifié par" (qui peuvent être différents mais appartenant tous les 2 au même fichier Utilisateur).
    Je souhaite en une seule requête récupérer le nom de l'utilisateur qui a crée l'enregistrement et celui de l'utilisateur qui l'a modifié.
    Est t-il possible de réaliser 2 jointures sur le même fichier ?
    N'ayant pas encore mon laptop sous la main, j'ai écrit ce code à la volée et souhaiterait savoir s'il est viable avant de m'y lancer ce soir!

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
    BL.IDBonLivraison IDBL,
    BL.DateBL,
    BL.SaisiPar,
    BL.SaisiLe,
    BL.ModifiéPar,
    BL.ModifiéLe,
     
    Utilisateur.NOM
     
    FROM BonLivraison BL
    JOIN Utilisateur ON Utilisateur.IDUTILISATEUR = BL.SaisiPar
    JOIN Utilisateur ON Utilisateur.IDUTILISATEUR = BL.ModifiéPar

    Merci d'avance pour toute aide.

    Cdlt

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 293
    Points
    293
    Par défaut
    bonjour,

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
    BL.IDBonLivraison IDBL,
    BL.DateBL,
    BL.SaisiPar,
    U1.NOM as UserSaisie,
    BL.SaisiLe,
    BL.ModifiéPar,
    U2.NOM as UserModif,
    BL.ModifiéLe
     
     
    FROM BonLivraison BL
    JOIN Utilisateur as U1 ON U1.IDUTILISATEUR = BL.SaisiPar
    JOIN Utilisateur as U2 ON U2.IDUTILISATEUR = BL.ModifiéPar

  3. #3
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 512
    Points : 10 249
    Points
    10 249
    Par défaut
    Comme le fait Jean-Phi sans le dire, il faut utiliser des alias sur tables.

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    Merci les Maestro du sql

    Je ne connaissais pas la possibilité des alias!

    Du coup voici les résultats que j'obtiens :

    En réalisant la requête sql suivante (juste sur le fichier BonLivraison), j'obtiens la totalité de mes enregistrement à savoir 430
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    	BL.IDBonLivraison IDBL,
    	BL.TypeBL,
    	BL.DateBL,
    	BL.Heure
     
    	FROM BonLivraison BL
     
    	ORDER BY IDBL DESC

    Par contre en voulant élaborer la même requête pour y ajouter les jointures et éviter les id chauffeur véhicule client etc... je n'arrive pas à récupérer tous les enregistrements (seulement 27)!

    Code SQL : 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
    27
    28
    SELECT
    	BL.IDBonLivraison IDBL,
    	BL.TypeBL,
    	BL.DateBL,
    	BL.Heure,
    	U1.NOM nu1,
    	BL.SaisiLe,
    	BL.Observations obsv,
    	BL.Annule,
    	BL.Impression,
    	BL.ModifiéLe,
    	U2.NOM nu2,
     
    	Client.NOM nc,
    	MR.ModeRèglement mdr,
    	Vehicule.IMMATRICULATION imm,
    	Chauffeur.NOM n
     
    	FROM BonLivraison BL
     
    	JOIN Client on Client.IDClient = BL.IDClient
    	JOIN Utilisateur U1 on U1.IDUTILISATEUR = BL.SaisiPar
    	JOIN Utilisateur U2 on U2.IDUTILISATEUR = BL.ModifiéPar
    	JOIN ModeRèglement MR on MR.IDModeRèglement = BL.IDModeRèglement
    	JOIN Vehicule on Vehicule.IDVEHICULE = BL.IDVEHICULE
    	JOIN Chauffeur on Chauffeur.IDCHAUFFEUR = BL.IDCHAUFFEUR
     
    	ORDER BY IDBL DESC

    Ai je loupé quelque chose encore?

    Merci d'avance encore une fis pour votre temps!

    Cdlt


    EDIT : Désolé les amis, j'écris puis je lis l'aide WD ... je pense que je ne changerai jamais pfff!
    Bref c'est un problème de jointure car j'ai des enregistrements sans ModifiéPar.
    Du coup en mettant LEFT OUTER JOIN en lieu et place de JOIN pour les Alias Utilisateur, tous mes enregistrements sont rapatriés par la requête!

    MERCI à tous pour l'aide.

  5. #5
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 734
    Points : 637
    Points
    637
    Par défaut
    Il me semble que avec tes jointures "Join ... ON" tu ne récupères que les infos ou les informations sont strictement égale.
    par exemple si le client n'a pas été modifié , il n'y aura rien dans BL.ModifiéPar.

    Il me semble que tu devrais passer par les LEFT JOIN .. ON ...

    J'espère ne pas dire trop de c... mais c'est peut-être une piste pour tes retours de lignes incomplètes

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JOIN Client on Client.IDClient = BL.IDClient
    	JOIN Utilisateur U1 on U1.IDUTILISATEUR = BL.SaisiPar
    	JOIN Utilisateur U2 on U2.IDUTILISATEUR = BL.ModifiéPar
    	JOIN ModeRèglement MR on MR.IDModeRèglement = BL.IDModeRèglement
    	JOIN Vehicule on Vehicule.IDVEHICULE = BL.IDVEHICULE
    	JOIN Chauffeur on Chauffeur.IDCHAUFFEUR = BL.IDCHAUFFEUR

    EDIT : Zut je n'avais lu la fin de ton message !! DSL !!!

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

Discussions similaires

  1. [AC-2013] Problème sur code SQL
    Par vinkey_33 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/05/2016, 08h50
  2. problème sur code SQL
    Par vinkey_33 dans le forum Access
    Réponses: 2
    Dernier message: 11/05/2016, 14h57
  3. [AC-2013] problème sur code SQL
    Par vinkey_33 dans le forum Access
    Réponses: 4
    Dernier message: 06/05/2016, 15h25
  4. problème de syntaxe des requêtes sql au sein d'un code php
    Par timakssat.mariam dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/09/2015, 11h12
  5. [MySQL] Problème changement d'année sur un calendrier - requète SQL
    Par nightwind dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/01/2011, 08h27

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