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 :

Jointures -> résultats répétés


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 158
    Points : 89
    Points
    89
    Par défaut Jointures -> résultats répétés
    Bonjour,

    Pour un récapitulatif de commandes, j'ai besoin de travailler avec quatre tables liées.

    Admettons que dans une commande il y ait 4 tickets, lorsque je veux afficher toutes mes commandes, la commande où il y a 4 tickets, le résultat s'affiche 4 fois et chaque fois c'est comme ça pour les commandes où ils y a plusieurs tickets.
    Comment n'afficher la commande qu'une seule fois? J'ai essayé avec LEFT, RIGHT, INNER... ça ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM Orders
    JOIN Tickets ON TicketOrder = OrderID
    JOIN Clients ON Clients.ClientID = Orders.OrderClient
    JOIN Paiements ON Paiements.PayOrder = Orders.OrderID
    ORDER BY PayStatus DESC, OrderID DESC;
    Merci pour votre aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Tout d'abord, évite la guerre des étoiles !

    Que veux-tu obtenir ?
    - le détail de chaque commande, donc potentiellement plusieurs tickets ?
    - un récapitulatif de chaque commande, par exemple le nombre de tickets ?

    Ta requête actuelle répond plutôt au premier besoin que je viens de citer et c'est normal qu'elle affiche 4 lignes s'il y a 4 tickets. C'est au logiciel qui présente les données à l'utilisateur de se débrouiller pour rassembler tout ça en une ligne si c'est ce qui est demandé au cahier des charges.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    Sachant qu'une commande (un record de la table commande) peut contenir plusieurs tickets (donc plusieurs records dans la table tickets), je voudrais afficher toutes mes commandes mais 1 seule fois.

    Or, avec la rêquete actuelle (exécutée dans SQL Server), le nombre de commandes affichées se répète par rapport au nombre de ticket existant...

    Exemple du résultat actuel :

    Commande 1 (Ticket 1)
    Commande 1 (Ticket 2)
    Commande 2 (Ticket 1)
    Commande 3 (Ticket 1)
    Commande 3 (Ticket 2)
    Commande 3 (Ticket 3)

    Exemple du résultat voulu :

    Commande 1
    Commande 2
    Commande 3

    Mais j'ai, bien sûr, besoin des informations de la table Tickets.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Euh... tu as bien lu ma réponse ? C'est normal que ça s'affiche comme ça ! Je peux même te prédire que si tu as plusieurs paiements pour une commande, ça multipliera encore les lignes !

    Exemple du résultat voulu :

    Commande 1
    Commande 2
    Commande 3

    Mais j'ai, bien sûr, besoin des informations de la table Tickets.
    Sauf que dans ton "résultat voulu", il n'y a pas les informations du ticket !

    Encore une fois, la présentation des données est du ressort du logiciel qui interroge la BDD, ce n'est pas le boulot du SGBD. Cela s'appelle de la cosmétique.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    Ok, je pensais que le problème était dans ma requête vu que c'est un domaine que je ne connais pas trop... je vais continuer mes recherches.

    Merci pour tes informations tout de même !

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    En fait, tu veux quoi au final ?

    Si une commande = n tickets et 1 ticket = m paiements, et que tu veux le total des paiements des commandes, alors tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT Clients.PayStatus, Orders.OrderID, sum(paiements.total) TotalOrder 
    FROM Orders
    JOIN Tickets ON TicketOrder = OrderID
    JOIN Clients ON Clients.ClientID = Orders.OrderClient
    JOIN Paiements ON Paiements.PayOrder = Orders.OrderID
    GROUP BY PayStatus, OrderID
    ORDER BY PayStatus DESC, OrderID DESC

    Après, il faut nous expliquer ce que tu veux exactement !
    On ne jouit bien que de ce qu’on partage.

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

Discussions similaires

  1. Jointure sans résultat sur mutualisé
    Par Sof34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/08/2011, 11h39
  2. Jointure aux résultats multiples
    Par samspitz dans le forum Zend_Db
    Réponses: 1
    Dernier message: 24/06/2010, 18h11
  3. COUNT avec jointure mauvais résultats
    Par Invité dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/02/2010, 16h28
  4. Jointure avec résultat group by
    Par castorameur dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/10/2009, 15h18
  5. Jointure sur résultat de procédure
    Par ben-34 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/02/2007, 13h58

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