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 04/01/2012, 09h57   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Requête de non existence

J'ai un petit soucis, voici le MPD que j'ai joint au message,
je voulais faire ressortir la liste des locataire qui n'ont pas fait l'objet de versement, pour effectuer un versement le locataire est enregistré dans la table verser, puis l'Id du MOIS aussi est associé, donc seuls les locataires ayant fait l'objet de verser peuvent se trouver dans cette table VERSER.

Aidez moi
Fichiers attachés
Type de fichier : pdf MLD_BON.pdf (96,0 Ko, 11 affichages)
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 09h59   #2
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bonjour,
Sous quel SGBD travailles-tu ?
Pourrais-tu nous donner ton ébauche de requête pour que nous puissions t'aider ?
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h41   #3
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Bonjour,

Au vu du mpd je penses qu'il va vous manquer une table de calendrier qui vous permettra de lister facillement tous les couple année/mois pour une location.

Une fois que vous aurez ça il suffira de tester la non existance (not exists) entre la table des versements et la table de location jointe à votre calendrier.

edit : oui tout à fait asmduty, manque plus qu'a savoir s'il utilise MySql ou pas... mais vu le mpd il me semble que c'est du MySql Workbench => pas de recursion, ni fonction de fenetrage
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 13h32   #4
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Sachant qu'il y a une date de début et de fin de location logiquement pas besoin de nouvelle table

Il faudrait chercher tous les couples mois/année non présents depuis le premier mois/année de location et le mois/année actuel avec le "not exists" comme l'a proposé punkoff
__________________
Le Porc est un loup pour le Porc.
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h08   #5
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 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par kokey Voir le message
je voulais faire ressortir la liste des locataire qui n'ont pas fait l'objet de versement,
Moi je comprends ça comme la liste des locataires n'ayant jamais fait de versement. Il suffirait donc de chercher les locataires qui n'existent pas dans la table verser.
__________________
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 04/01/2012, 14h54   #6
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Plus de precision

Bonjour,
Au fait j'utilise la base de Données Mysql 5

SVP si je comprend bien l'ébauche de requette dont vous me demander c'est un debut de ce que j'ai dejà commencer, si c'est cela ce n'est qu'un brullons qui n'a pas de sens.

En plus j'ai dejà une table MOIS et au niveau des enregistrements dans la table VESER, cette dernière prend l'identité du locataire (idlocataire) l'identité de la table MOIS (idmois) et en plus de cela l'utilisateur saisie l'année dans la table VERSER.

Donc je voulais avoir comme resultat, la liste des locataires qui n'ont jamais fait de versement et ceux qui ont fait aussi des veserment.
Exemple nous somme en janvier, si nous prenons un intervalle de date qui couvre la periode de JANVIER à MARS ont doit pouvoir voir ceux qui n'ont jamais payer et ceux qui ont seulement payé pour le mois de janvier ou février et cette requette doit me sortir aussi bien les noms, et les mois impayés.
Merci
Fichiers attachés
Type de fichier : pdf MLD_BON.pdf (96,0 Ko, 1 affichages)
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h16   #7
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
bonjour,


Je persisterai donc sur mon idée de base à savoir qu'il va vous manquer une table de type calendrier : calendrier (annee, mois).

Ceci permettra de connaitre justement vos trous dans les versements en recoupant avec la plage de location.

Donc creuser dans ce sens, et présentez des ébauches de requêtes.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h24   #8
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 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Essaie cette requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT m.mois, l.nom, l.prenom
FROM mois m
LEFT OUTER JOIN verser v 
	ON v.mois_idmois = m.idmois
	AND v.anne = 2012
 
 
	RIGHT OUTER JOIN locataire l 
		ON l.idlocataire = v.locataire_idlocataire
 
WHERE m.idmois BETWEEN 1 AND 3 
       AND v.locataire_idlocataire IS NULL
__________________
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 04/01/2012, 15h30   #9
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Pas de plage de location dans la règle de gestion

Le locations ici ne font pas l'objet de plage, un locataire qui loue une chambre doit payer regulièrement ses loyer aufur et à mesure que le mois finisse, dont ici il n'est pas question que le locataire a fait une location sur 12 MOIS c'est de Janvier 2012 à Décembre 2012, non il fait la locaton pour tout le temps que le propriètaire accepte toujours de mettre en location ses chambres. Donc c'es sur cet aspect que les verserments se font à chaque fin du mois en donnant les informations sur le locataire, le mois de location et on saisie l'année.
Merci
Fichiers attachés
Type de fichier : pdf MLD_BON.pdf (96,0 Ko, 4 affichages)
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h50   #10
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Bonjour CinePhil

Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT m.mois, l.nom, l.prenom
FROM mois m
LEFT OUTER JOIN verser v 
	ON v.mois_idmois = m.idmois
	AND v.anne = 2012
 
 
	RIGHT OUTER JOIN locataire l 
		ON l.idlocataire = v.locataire_idlocataire
 
WHERE m.idmois BETWEEN 1 AND 3 
       AND v.locataire_idlocataire IS NULL
Je viens d'executer votre code sql, le resultat m'a donné zero ligne, je crois c'est parceque la dernière ligne
Code :
v.locataire_idlocataire IS NULL
ne trouve pas de correspondance car je crois à mon a avis et comprendre que pour cette partie
Code :
v.locataire_idlocataire IS NULL
doit etre un champ et avoir comme valeur null
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h50   #11
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
J'ai relu 3 fois et n'ai toujours pas compris votre explication.


Vu que vous avez une date de début de location et une date de fin de location vous avez bien une plage durant laquelle votre location est active, non ?


Bref, sinon votre résultat vous le chercher :
- pour le mois en cours uniquement ?
- pour l'année en cours (jusqu'au mois courrant) ?
- tout l'historique ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h04   #12
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Bonjour CinePhil

Donc si j'enlève
Code :
 AND v.locataire_idlocataire IS NULL
, le resultat me donne plus la liste de ceux qui fait un versement dans l'année 2012 dont le mois se situ entre 1 et 3.

Je crois ma solution serais le contraire du resultat que donne cette requête.
Merci pour votre aide, je crois que nous y arriverons à trouver la meilleur requête.
Merci
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h15   #13
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Bonjour punkoff

ce que signifie date debut et fin loacation dans la Table louer
Ces deux dates sont la periode que couvre les Avances juste a la location, donc après versement de cette avance le locataire à l'obligation de commenecer par payé à chaque fin du mois et c'est cette somme qui est enregistrer dans la table VERSER. et c'est sur cette table qu'on doit chercher ceux qui n'ont pas fait de versement.
Merci
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h18   #14
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Et quand une location n'est plus active que se passe-t-il ?
Vous effacez physiquement la ligne concernée de la table louer ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h37   #15
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Bonjour punkoff

Je mets à jour ces lignes qui ont été occuper par un locataire, dans un champs qui prendra comme information expiré, pour signifier que la location est expiré.
Merci
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h03   #16
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Et votre requête devra pouvoir aussi retourner les résutlats sur plusieurs années ? (par exemple de septembre 2011 à Mars 2012)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h21   #17
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Bonjour punkoff

Non seulement sur periode couvrant une année seulement.
Merci.
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 19h02   #18
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 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Ma requête ne fonctionnait effectivement pas.

Pour avoir les locataires qui n'ont pas versé le mois de janvier, tu peux faire cette requête :
Code :
1
2
3
4
5
6
7
SELECT l.nom, l.prenom
FROM locataire l
LEFT OUTER JOIN verser v 
	ON v.locataire_idlocataire = l.idlocataire
	AND v.anne = 2012
	AND v.mois_idmois = 1
WHERE v.locataire_idlocataire IS NULL
Par contre, si tu allonge la période sur plusieurs mois, tu n'auras que les locataires qui n'ont jamais payé durant toute la période mais pas ceux qui ont payé certains mois et pas d'autres. Et tu ne sauras pas quel(s) mois ont été payés ou non.

Je n'ai pour le moment pas trouvé de solution à ton problème en apparence simple.
__________________
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 05/01/2012, 00h05   #19
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
bonjour,

il suffit d'adapter la requete a cinephil, en faisant un cross join entre la table louer et les mois, apres en gardant la même structure ca fonctionne

edit :
Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT l.nom, l.prenom, a.chambre_idchambre, a.mois
FROM (SELECT a.chambre_idchambre, a.locataire_idlocataire, b.idmois, b.mois FROM louer a, mois b WHERE b.mois BETWEEN 1 AND 5) a
INNER JOIN locataire l ON l.idlocataire = a.locataire_idlocataire
LEFT OUTER JOIN verser v 
	ON v.locataire_idlocataire = a.locataire_idlocataire 
	AND v.chambre_idchambre = a.chambre_idchambre
	AND v.annee = 2011
	AND v.mois_idmois = a.idmois
WHERE v.locataire_idlocataire IS NULL
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 19h07   #20
Invité de passage
 
Inscription : septembre 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 16
Points : 0
Points : 0
Par défaut Bonsoir punkoff, CinePhil

Ok, je Vais essai et je vous donnerai la suite, merci pour tout votre attention que vous avez pour moi.

Kokey
kokey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h27.


 
 
 
 
Partenaires

Hébergement Web