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 (left join) avec paramètres


Sujet :

Langage SQL

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut Jointure (left join) avec paramètres
    Bonjour a tous ,
    SVP , j' ai trois tables :
    1- Tables des Produits qui contient la liste des produits en stock :
    (CodeProd , Designation, QteStk)

    2- Table detailVente qui contient la liste des produit vendu:
    (NumeroBon, CodeProd , QteVendu , PrixVente , DateVente)

    3- Table detailVenteSpecial (presque même table detailVente ) qui contient la liste des produit vendu:
    (NumeroBon, CodeProd , QteVendu , PrixVente , DateVente)

    je cherche a savoir la liste des Produits non vendu dans une période définit .
    Nom : ProduitNonVendu.png
Affichages : 3406
Taille : 15,8 Ko

    j'ai réussi a avoir les produits non vendu (jointure TableProduit et Detailvente )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    from TableProduit A
    left join Detailvente B on A.CodeProd = B.CodeProd
    Where  (B.CodeProd is null)
    mais pour une période , j'ai essayé cette requête mais ça n'a pas marché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    from TableProduit A
    left join Detailvente B on A.CodeProd = B.CodeProd
    Where ((B.DateVente >= '01/01/2016') and (B.DateVente <= '05/05/2016'))  and (B.CodeProd is null)
    une aide SVP....

  2. #2
    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 789
    Points
    30 789
    Par défaut
    Il faut ramener la restriction sur la table B dans les conditions de jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select *
    from TableProduit A
    left join Detailvente B on A.CodeProd = B.CodeProd
        and B.DateVente between '01/01/2016' and '05/05/2016'
    Where B.CodeProd is null
    Quoiqu'il serait plus judicieux d'utiliser EXISTS
    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.

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Bonjour,
    Merci beaucoup al1_24 pour la réponse , c'est exactement ce que je cherche .
    SVP , pour inclure la troisième table (qui est Table detailVenteSpecial) dans la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select *
    from TableProduit A
    left join Detailvente B on A.CodeProd = B.CodeProd
        and B.DateVente between '01/01/2016' and '05/05/2016'
    left join GCC011 C on A.CodeProd = C.CodeProd
        and C.DateVente between '01/01/2016' and '05/05/2016'
     
    Where (B.CodCode is null) and (C.CodeProd is null)

    al1_24 a dit :
    Quoiqu'il serait plus judicieux d'utiliser EXISTS
    y t il un exemple SVP?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select Col1, Col2,..., Coln
    from TableProduit PRD
    where not exists
         (select 1
          from Detailvente DTV
          where DTV.CodeProd = PRD.CodeProd 
            and DTV.DateVente between '01/01/2016' and '05/05/2016')
      and not exists
         (select 1
          from GCC011 GCC 
          where GCC.CodeProd = PRD.CodeProd
            and GCC.DateVente between '01/01/2016' and '05/05/2016')
    J'ai remplacé le select "*" par une liste de colonnes, le select "*" étant à proscrire car dangereux et couteux

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select Col1, Col2,..., Coln
    from TableProduit PRD
    where not exists
         (select 1
          from Detailvente DTV CROSS JOIN GCC011 GCC 
          where DTV.CodeProd = PRD.CodeProd 
            and DTV.DateVente between '01/01/2016' and '05/05/2016'  
            and GCC.CodeProd = PRD.CodeProd)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Merci beaucoup .

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

Discussions similaires

  1. Jointure LEFT JOIN avec Double COUNT
    Par Mike91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2015, 12h37
  2. [AC-2007] Recherche équivalent Left Join avec jointure =
    Par neupont dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/10/2012, 18h58
  3. Left join avec 3 tables
    Par MathiasMathias dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/04/2007, 00h45
  4. Réponses: 6
    Dernier message: 23/01/2007, 10h17
  5. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38

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