Aller au contenu

Requête avec jointure, compter le nombre de ligne


Sujets conseillés

Posté

Bonjour,

J'ai un petit soucis avec uen requête (à moins que ma mémoire flanche).

J'ai trois tables :

tAuteur (idAuteur, nomAuteur);

tLivre (idLivre, idAuteur, nomLivre);

tFilm (idFilm, idAuteur, nomFilm, dateRealisation);

Chaque auteur peut être relié à 0 ou plusieurs livres et à 0 ou plusieurs films.

Ce qui nous donne un jeu d'essai du style :

tAuteur :
1,'Auteur Un'
2,'Auteur Deux'
3,'Auteur Trois'
4,'Auteur Quatre'

tLivre :
1,1,'Livre Un'
2,2,'Livre Deux'
3,3,'Livre Trois'
4,1,'Livre Un Bis'

tFilm :
1,1,'Film Un', '2007-01-02'
2,2,'Film Deux', '2007-01-02'
3,3,'Film Trois', '2007-01-02'
4,3,'Film Trois Bis', '2008-01-02'

J'essaie de trouver une requête qui me fournirrait comme résultat :

idAuteur, nomAuteur, NombreLivre, NombreFilm, DernierFilm
1 Auteur Un 2 1 'Film Un'
2 Auteur Deux 1 1 'Film Deux'
3 Auteur Trois 1 2 'Film Trois Bis'
4 Auteur Quatre 0 0 null

J'arrive à tout récupérer sauf le dernier film. :s

SELECT A.idAuteur, A.nomAuteur, COUNT(DISTINCT idLivre) AS NombreLivre, COUNT(DISTINCT idFilm) AS NombreFilm
FROM tLivre L LEFT JOIN tAuteur A ON L.idAuteur = A.idAuteur
LEFT JOIN tFilm F ON F.idAuteur = A.idAuteur
GROUP BY A.idAuteur

En espérant ne pas mettre planter dans mon explications ;o)

MErci.

  • 2 semaines plus tard...
Posté

Salut,

Je pense qu'en utilisant les requêtes imbriquées cela doit fonctionner. Tu peux essayer par exemple :

SELECT A.idAuteur, A.nomAuteur, COUNT(DISTINCT idLivre) AS NombreLivre, COUNT(DISTINCT idFilm) AS NombreFilm, T.dernier_film
FROM tLivre L LEFT JOIN tAuteur A ON L.idAuteur = A.idAuteur
LEFT JOIN tFilm F ON F.idAuteur = A.idAuteur
LEFT JOIN (
SELECT idAuteur, nomFilm AS dernier_film
FROM tFilm F1
WHERE dateRealisation = (
SELECT max(dateRealisation) FROM tFilm F2 WHERE F2.idAuteur = F1.idAuteur )
) T ON T.idAuteur = A.idAuteur
GROUP BY A.idAuteur, A.nomAuteur;

J'éspère que cela fonctionne car je ne peut pas la tester. Croisons un maximum de doigts :P

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...