Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 20/11/2007, 16h19   #1
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
Par défaut pb de requete avec firebird

Bonsoir a tous voici mon pb
j'ai 3 tables

1 cotisation(idco,libelle, montant, nomadherents)
2 adhérents(idadh, nom)
3 projet(libpro)

un adhérent effectue une cotisation at chaque cotisation possède son libelle
on des liens de père-fils entre les tables cotisation(fils) adhérents(pére) et libpro(pére) cotisation(fils)

j'ai donc les données suivantes

adhérents cotisation projet
l'adherents x1 paye 2000 pour le projet P1
l'adherents x2 paye 2000 pour le projet P1
l'adherents x1 paye 2000 pour le projet P2
l'adherents x1 paye 2000 pour le projet P3

je veux une requete pour avoir les cotisations que x2 n'a pas payé :
x2 n'a pas payé P2 et P3.

merci à tous pour requete qui m'aidera. je suis passez par les jointure externes mais je ne m'en sort pas.
marci
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 16h35   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Salut

Tu peux nous montrer les DDL de tes 3 tables, pour voir comment sont définis tes PK et FK.

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 16h43   #3
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
apparament là je suis dans un cyber en ville, mais
voici un peu un bref aperçu

Citation:
1 cotisation(idco,libelle, montant, nomadherents)
2 adhérents(idadh, nom)
3 projet(libpro)

cotisation-- >PK=idco FK=libelle(projet), nomadherents(adhérents)

adherents--> PK=idadh

projet--> PK=libpro
tous les PK sont de type integer
les FK de type Varchar(20)
Merci
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 17h42   #4
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Salut

J'ai crée tes 3 tables avec une PK basée sur l'ID pour chacune d'elle.
Puis j'ai obtenu un résultat en passant par une vue.

Cette vue est définie ainsi:
Code :
1
2
3
4
5
6
7
8
9
 
CREATE VIEW PROJETS_ADHERENTS(
    IDPROJ,
    IDADH)
AS
SELECT
  P.IDPROJ, A.IDADH
FROM
  PROJETS P, ADHERENTS A;
Et enfin la requête pour les absences de cotisations:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT
  A.NOM, P.LIBPROJ
FROM
  PROJETS_ADHERENTS PA
  LEFT OUTER JOIN COTISATIONS C
  ON PA.IDPROJ = C.IDPROJ AND PA.IDADH = C.IDADH
  INNER JOIN ADHERENTS A
  ON PA.IDADH = A.IDADH
  INNER JOIN PROJETS P
  ON PA.IDPROJ = P.IDPROJ
WHERE
  C.MONTANT IS NULL;

Voilà, il y certainement mieux. Peut-être en passant par une procédure stockée, surtout si tu as beaucoup d'adhérents et de projets car là l'ouverture de la vue va trainer en longueur.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 17h58   #5
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
Citation:
Peut-être en passant par une procédure stockée, surtout si tu as beaucoup d'adhérents et de projets car là l'ouverture de la vue va trainer en longueur.
ET oui cè vrai votre remarque est très correcte cette option est très lourde car la base evolue tres rapidement.
je vais creuser du coté des procedures stockeés
Merci d'avance
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 19h15   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
sur le même principe sans la vue:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  A.NOM_A, P.LIB_P
FROM
  (SELECT P.IDP, A.IDA  FROM PROJET P, ADH A) PA
  INNER JOIN ADH A
  ON PA.IDA = A.IDA
  INNER JOIN PROJET P
  ON PA.IDP = P.IDP
  LEFT OUTER JOIN COTISATION C
  ON PA.IDP = C.IDP AND PA.IDA = C.IDA
WHERE
  C.MONTANT IS NULL;
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 10h36   #7
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
je vous remerci tous pour cette aide
devalender 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 01h05.


 
 
 
 
Partenaires

Hébergement Web