Requête avec jointure externe, count et where
prince25
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Prince25 -
Prince25 -
Bonjour chers commentcamarchiens,
J'ai un petit problème pour executer une requête SQL de l'un de mes projets. Ma base de données est une gestion de bibliothèque. Je désire afficher le nombre de livres empruntés par chaque lecteur :
Résultat :
id_lecteur | nom_lecteur | prenom_lecteur | Nb
------------+-------------+----------------+----
2 | Dupond | Tony | 1
4 | Giersh | Annabelle | 2
1 | Moine | Jimmy | 0
5 | Bellabouvier | Matthieu | 1
3 | Farkli | Raphael | 1
(5 rows)
Jusque là tout va bien. Par contre, si je ne veux que les emprunts à partir d'une certaine date, il ne m'affiche plus les lecteurs avec un nombre égal à 0 :
Résultat :
id_lecteur | nom_lecteur | prenom_lecteur | Nb
------------+-------------+----------------+----
4 | Giersh | Annabelle | 2
5 | Bellabouvier | Matthieu | 1
(2 rows)
Le problème est qu'il ne m'affiche plus les lecteurs sans emprunts, la jointure externe se perd. Sauriez-vous d'où vient mon problème ?
En espérant avoir été clair, Prince25.
J'ai un petit problème pour executer une requête SQL de l'un de mes projets. Ma base de données est une gestion de bibliothèque. Je désire afficher le nombre de livres empruntés par chaque lecteur :
SELECT l.id_lecteur, nom_lecteur, prenom_lecteur, COUNT(id_exemplaire) "Nb" FROM LECTEUR l LEFT OUTER JOIN Emprunte_archive ea ON l.id_lecteur = ea.id_lecteur GROUP BY l.id_lecteur, nom_lecteur, prenom_lecteur;
Résultat :
id_lecteur | nom_lecteur | prenom_lecteur | Nb
------------+-------------+----------------+----
2 | Dupond | Tony | 1
4 | Giersh | Annabelle | 2
1 | Moine | Jimmy | 0
5 | Bellabouvier | Matthieu | 1
3 | Farkli | Raphael | 1
(5 rows)
Jusque là tout va bien. Par contre, si je ne veux que les emprunts à partir d'une certaine date, il ne m'affiche plus les lecteurs avec un nombre égal à 0 :
SELECT l.id_lecteur, nom_lecteur, prenom_lecteur, COUNT(id_exemplaire) "Nb" FROM LECTEUR l LEFT OUTER JOIN Emprunte_archive ea ON l.id_lecteur = ea.id_lecteur WHERE date_debut_archive > '2011-09-10' GROUP BY l.id_lecteur, nom_lecteur, prenom_lecteur;
Résultat :
id_lecteur | nom_lecteur | prenom_lecteur | Nb
------------+-------------+----------------+----
4 | Giersh | Annabelle | 2
5 | Bellabouvier | Matthieu | 1
(2 rows)
Le problème est qu'il ne m'affiche plus les lecteurs sans emprunts, la jointure externe se perd. Sauriez-vous d'où vient mon problème ?
En espérant avoir été clair, Prince25.
A voir également:
- Requête avec jointure externe, count et where
- Chkdsk disque dur externe - Guide
- Where is it - Télécharger - Gestion de fichiers
- Batterie externe clignote ne charge pas - Forum Mobile
- Appel externe c'est quoi - Forum telephonie fixe
- Brancher lecteur dvd externe sur tv en usb - Forum Lecteurs et supports vidéo
2 réponses
Salut,
Essayes de nous montrer les dates de début d'archive pour tes lignes de résultats (y compris les 0)
Essayes de nous montrer les dates de début d'archive pour tes lignes de résultats (y compris les 0)
Salut Melooo et merci de me répondre,
Je pense que le plus simple est d'afficher ma table Emprunte_archive en marquant celles qui vérifient la condition du WHERE :
Resultat :
id_lecteur | id_exemplaire | date_debut_archive | date_fin_archive | nom_lecteur | prenom_lecteur | id_type_lecteur
------------+---------------+--------------------+------------------+-------------+----------------+-----------------
3 | 1 | 2011-04-21 | 2011-05-10 | Farkli | Raphael | 2
2 | 3 | 2011-08-03 | 2011-08-29 | Dupond | Tony | 1
5 | 4 | 2011-09-14 | 2011-10-06 | Bellabouvier | Matthieu | 3 ===> VERIFIE LE WHERE
4 | 6 | 2011-10-02 | 2011-10-24 | Giersh | Annabelle | 2 ===> VERIFIE LE WHERE
4 | 7 | 2011-12-22 | 2012-01-02 | Giersh | Annabelle | 2 ===> VERIFIE LE WHERE
(5 rows)
Je pense que le plus simple est d'afficher ma table Emprunte_archive en marquant celles qui vérifient la condition du WHERE :
SELECT * FROM Emprunte_archive NATURAL JOIN Lecteur;
Resultat :
id_lecteur | id_exemplaire | date_debut_archive | date_fin_archive | nom_lecteur | prenom_lecteur | id_type_lecteur
------------+---------------+--------------------+------------------+-------------+----------------+-----------------
3 | 1 | 2011-04-21 | 2011-05-10 | Farkli | Raphael | 2
2 | 3 | 2011-08-03 | 2011-08-29 | Dupond | Tony | 1
5 | 4 | 2011-09-14 | 2011-10-06 | Bellabouvier | Matthieu | 3 ===> VERIFIE LE WHERE
4 | 6 | 2011-10-02 | 2011-10-24 | Giersh | Annabelle | 2 ===> VERIFIE LE WHERE
4 | 7 | 2011-12-22 | 2012-01-02 | Giersh | Annabelle | 2 ===> VERIFIE LE WHERE
(5 rows)
Dans ta requête SQL tu as ca :
Ce qui veut dire que tu veux seulement les lecteurs avec une date d'archive supérieur au 10 septembre 2011...
Donc ta requête te sort :
Car ce sont les seuls lecteurs qui remplissent correctement ta clause where.
Donc le résultat de ta requête est tout à fait normal...
WHERE date_debut_archive > '2011-09-10'
Ce qui veut dire que tu veux seulement les lecteurs avec une date d'archive supérieur au 10 septembre 2011...
Donc ta requête te sort :
5 | 4 | 2011-09-14 | 2011-10-06 | Bellabouvier | Matthieu | 3 ===> VERIFIE LE WHERE 4 | 6 | 2011-10-02 | 2011-10-24 | Giersh | Annabelle | 2 ===> VERIFIE LE WHERE
Car ce sont les seuls lecteurs qui remplissent correctement ta clause where.
Donc le résultat de ta requête est tout à fait normal...
Ah ouai d'accord mais le soucis c'est que magré mon WHERE, j'aimerais qu'il m'affiche quand même tous les lecteurs (avec un nombre d'emprunt égal à 0 si cas échéant)
Un truc qui ressemblerait à ca:
id_lecteur | nom_lecteur | prenom_lecteur | Nb
------------+-------------+----------------+----
2 | Dupond | Tony | 0
4 | Giersh | Annabelle | 2
1 | Moine | Jimmy | 0
5 | Bellabouvier | Matthieu | 1
3 | Farkli | Raphael | 0
Saurait-tu comment je pourrais faire ça ?
Un truc qui ressemblerait à ca:
id_lecteur | nom_lecteur | prenom_lecteur | Nb
------------+-------------+----------------+----
2 | Dupond | Tony | 0
4 | Giersh | Annabelle | 2
1 | Moine | Jimmy | 0
5 | Bellabouvier | Matthieu | 1
3 | Farkli | Raphael | 0
Saurait-tu comment je pourrais faire ça ?
Intitulé de la requête : Afficher TOUS LES LECTEURS avec, pour chacun, le nombre d'emprunt supérieur à une date donnée.
Comme j'essaye de l'expliquer, j'aimerais que TOUS les lecteurs s'affichent, même s'ils n'ont fait aucun emprunt supérieur à la date donnée.
J'espère que c'est assez clair du coup... :P
Comme j'essaye de l'expliquer, j'aimerais que TOUS les lecteurs s'affichent, même s'ils n'ont fait aucun emprunt supérieur à la date donnée.
J'espère que c'est assez clair du coup... :P
Euh je verrais un truc comme ca :
mais vraiment pas sur du résultat
SELECT l.id_lecteur, nom_lecteur, prenom_lecteur, COUNT(id_exemplaire) "Nb" FROM LECTEUR l LEFT OUTER JOIN Emprunte_archive ea ON l.id_lecteur = ea.id_lecteur WHERE date_debut_archive > '2011-09-10' OR nombre_emprunt >= 0 GROUP BY l.id_lecteur, nom_lecteur, prenom_lecteur;
mais vraiment pas sur du résultat