Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 10h08   #1
Nouveau Membre du Club
 
Sleeg Adri
Inscription : juillet 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : Sleeg Adri

Informations forums :
Inscription : juillet 2010
Messages : 131
Points : 39
Points : 39
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 :
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.
sleeg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 10h24   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 10h36   #3
Nouveau Membre du Club
 
Sleeg Adri
Inscription : juillet 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : Sleeg Adri

Informations forums :
Inscription : juillet 2010
Messages : 131
Points : 39
Points : 39
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.
sleeg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 10h43   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 !

Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 11h04   #5
Nouveau Membre du Club
 
Sleeg Adri
Inscription : juillet 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : Sleeg Adri

Informations forums :
Inscription : juillet 2010
Messages : 131
Points : 39
Points : 39
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 !
sleeg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 12h15   #6
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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 :
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 !
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h50.


 
 
 
 
Partenaires

Hébergement Web