Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 22/05/2006, 09h43   #1
Membre du Club
 
Avatar de Miles Raymond
 
Inscription : avril 2005
Messages : 180
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 180
Points : 41
Points : 41
Par défaut [Requête]Requête avec condition

Bonjour,

Voilà, je développe un programme de gestion particulier ( je vais pas entrer dans les détails) et là j'ai un petit problème de requête.

En fait il y a 4 tables. Une table clients, une table factures, une table bâtiments et une table rénovations. J'aimerais pouvoir récupérer toutes les factures d'un client x avec : son noFacture, le noBatiment, le nomBatiment et si une rénovation à eu lieu, le noRenovation et la date de la renovation. Mais j'aimerais que cette requête me sélectionne les données de rénovation uniquement pour le batiment de la facture en question et UNIQUEMENT si une ou plusieurs rénovation on eu lieu pour ce bâtiment.

Avec des INNER JOINT le problème est qu'à chaque sélection du noRenovation et de la date il me sélectionne la facture,etc.. Par exemple il me sélectionne tout ça 4 fois si 4 rénovations ont eu lieu !

Une idée d'une méthode qui me permettrait une sélection non redondante des données ?

Merci d'avance.
Miles Raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 10h24   #2
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
select ...
inner join ...
where Batiment.noBatiment || ';' || renovations.norenovation in (Select noBatiment || ';' || Max(DateRenovation) from renovations Group by noBatiment)

Cette requete devrait te permettre de récupérer seulement la dernière renovation de la facture du client
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 10h49   #3
Membre du Club
 
Avatar de Miles Raymond
 
Inscription : avril 2005
Messages : 180
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 180
Points : 41
Points : 41
Citation:
Envoyé par anto
select ...
inner join ...
where Batiment.noBatiment || ';' || renovations.norenovation in (Select noBatiment || ';' || Max(DateRenovation) from renovations Group by noBatiment)

Cette requete devrait te permettre de récupérer seulement la dernière renovation de la facture du client
En fait je ne cherches pas à récupérer la dernière rénovation de la facture du client. J'exécute une requête qui récupérera toutes les factures du client et qui, si la facture concerne des rénovations (car elles peuvent concerner d'autres choses), récupère le noRenovation et la dateRenovation et les affichent.

Exemple :

2 factures, une simple et une concernant des rénovations effectués en mars.

noFacture noBatiment nomBatiment noRenovation dateRenovation
1---------2----------Villa--------------------------------------
2---------3----------Immeuble----1-------------13.03.06------
Miles Raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 11h08   #4
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
si ta facture 2 a pls renovations tu veux que ca t affiche quoi?
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 11h11   #5
Membre du Club
 
Avatar de Miles Raymond
 
Inscription : avril 2005
Messages : 180
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 180
Points : 41
Points : 41
Citation:
Envoyé par anto
si ta facture 2 a pls renovations tu veux que ca t affiche quoi?
Une seule facture ne peux avoir qu'un seule rénovation. Comme ça m'affiche chaque facture, si un seul bâtiment à 5 rénovations, il y aura 5 factures avec 5 numéros de facture différents.
Miles Raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 11h22   #6
Membre régulier
 
Avatar de anto
 
Inscription : juin 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 86
Points : 72
Points : 72
tu peut me montrer ta requete stp
anto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 11h44   #7
Membre du Club
 
Avatar de Miles Raymond
 
Inscription : avril 2005
Messages : 180
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 180
Points : 41
Points : 41
Voilà une requête de teste qui choisi uniquement les factures du client 5584.

Code :
1
2
3
4
5
6
7
 
SELECT batiments.noBatiment, batiments.nomBatiment, renovations.noRenovation,renovations.dateRenovation,
factures.noFacture,factures.date,factures.noClients,factures.noBatiment 
FROM renovations
FULL OUTER JOIN factures ON renovations.noRenovation = factures.idRenovation
FULL OUTER JOIN batiments ON factures.idBatiment = batiments.noBatiment 
WHERE factures.noClient = '5584'
Et là il me sélectionne toutes les factures de ce client, me les affichent toutes de manière correct. Seul problème : il n'affiche ni le noRenovation, ni la dateRenovation lors d'un facture de renovation...
Miles Raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 12h30   #8
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

Citation:
Envoyé par Miles Raymond
Avec des INNER JOINT le problème est qu'à chaque sélection du noRenovation et de la date il me sélectionne la facture,etc.. Par exemple il me sélectionne tout ça 4 fois si 4 rénovations ont eu lieu !
Utilise plutôt factures LEFT OUTER JOIN renovations...
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2006, 14h20   #9
Membre du Club
 
Avatar de Miles Raymond
 
Inscription : avril 2005
Messages : 180
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 180
Points : 41
Points : 41
Citation:
Envoyé par GrandFather
Bonjour,

Utilise plutôt factures LEFT OUTER JOIN renovations...
En fait comme tu peux le voir dans le post au-dessus j'utilise FULL OUTER JOIN. Mon problème reste toujours ouvert...
Miles Raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 08h30   #10
Membre du Club
 
Avatar de Miles Raymond
 
Inscription : avril 2005
Messages : 180
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 180
Points : 41
Points : 41
Bon ben la faute venait de moi. Je faisait un lien avec le faux champ dans ma table facture (idRenovation alors que c'était noRenovation). Désolé du dérangement

Merci à tout ceux qui ont essayés de m'aider !
Miles Raymond 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 18h22.


 
 
 
 
Partenaires

Hébergement Web