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

SQLite Discussion :

Requête entre 3 tables


Sujet :

SQLite

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Requête entre 3 tables
    Bonjour,

    J'ai un projet de gestion de stock en C++ avec QT et en base de données SQLITE.

    Je coince sur une requête reliant 3 tables.

    Voici mon MLD :

    Article(idArticle, codeArticle, designationArticle, poidsArticle)
    Livrer(idLivrer, qteLivree, numeroLivraison, dateLivraison, #idArticle)
    Expedier(idExpedier, qteExpediee, numeroExpediee, #idArticle)

    Il peut y avoir plusieurs livraisons ET expédition pour un article donc plusieurs lignes dans les tables livrer et expédier.

    Je souhaite avoir une requête qui me donne le stock total restant (QteLivree - QteExpediee = QteTOTAL) et qui m'affiche les stocks NULL.

    Le problème que j'ai c'est que avec la requête ci-dessous, elle me multiplie la quantité livrée ou expédiée suivant le nombre de ligne.
    J'ai testé avec des SUM mais CA ne fonctionne pas mieux.

    Voici un test d'une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT livrer.qteLivree - expedition.qteExpedition AS 'Qte Phy Totale',
    livrer.qteLivree AS 'Qte Livrée',
    expedition.qteExpedition AS 'Qte Exp',
    article.codeArticle as Référence, 
    article.designationArticle as Libelle, 
    article.poidsArticle as Poids
    FROM article 
    LEFT JOIN livrer ON article.idArticle = livrer.idArticle 
    LEFT JOIN expedition ON article.idArticle = expedition.idArticle 
    GROUP BY article.idArticle
    Merci d'avance pour votre aide.

    Bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    deux approches avec ou sans CTE (Common Table Expressions)

    celle avec les CTE est certainement plus lisible et plus efficace du fait que les quantités livrées et expédiées à obtenir sont utilisées 2 fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH E AS (SELECT IDARTICLE,SUM(qteExpediee) AS EXPEDIE FROM EXPEDIER GROUP BY IDARTICLE),
            L AS (SELECT IDARTICLE,SUM(qteLivree) AS LIVRE FROM LIVRER GROUP BY IDARTICLE)
     
    SELECT  COALESCE(L.Livre,0) - COALESCE(E.EXPEDIE,0) AS 'Qte Phy Totale',
    L.Livre AS 'Qte Livrée',
    E.Expedie AS 'Qte Exp',
    A.codeArticle as Référence, 
    A.designationArticle as Libelle, 
    A.poidsArticle as Poids
    FROM article 
    LEFT JOIN L ON A.idArticle = L.idArticle 
    LEFT JOIN E ON A.idArticle = E.idArticle
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Un grand MERCI
    Bonsoir,

    Merci beaucoup pour ton aide.
    Je ne connaissais pas du tous ses commandes.
    Cela fonctionne très bien.

    Merci beaucoup.

    A garder dans le coin de ma tête.

    Merci bonne soirée.

    Redbull68

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

Discussions similaires

  1. [AC-2003] Requête entre trois table
    Par Zoulficar dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 26/11/2009, 19h32
  2. [AC-2003] problèmes requêtes entre deux tables
    Par butch31 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 09/07/2009, 10h18
  3. Réponses: 1
    Dernier message: 11/06/2009, 23h39
  4. [SQL] Requête entre 2 tables
    Par R4ndy dans le forum AS/400
    Réponses: 4
    Dernier message: 13/01/2009, 22h24
  5. Réponses: 4
    Dernier message: 29/12/2008, 09h04

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