Bonjours à tous,
Désolé pour l'intitulé un peu long mais je voulais qu'il soit le plus précis possible.
Mon soucis est plus de l'ordre de l'optimisation ou de la bonne pratique qu'un problème irrésolu.
Pour simplifié j'ai transposé à l'exemple bateau table FILM, ACTEUR et table d'association FILM_ACTEUR.
Je cherche, par exemple, les films dans lesquels joue 'Laurence Fishburne' (ACTEUR.id=1) ET 'Keanu Reeves' (ACTEUR.id=2)
Voici ma 1ère requête:
Que j'ai vite abandonné car je pouvais avoir des problèmes si je faisais la même recherche mais avec une longue liste d'acteurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT FILM.id FROM FILM JOIN FILM_ACTEUR A ON FILM.id=A.filmID JOIN FILM_ACTEUR B ON FILM.id=B.filmID WHERE A.acteurID=1 AND B.acteurID=2
Je suis donc passé à cette requête:
Pour le moment cette requête me convient, elle est plutôt facile à formater, le post traitement ne me pose aucun souci, mais s'il y avait une requête plus élégante, simple et sans post-traitement pour faire ça, ce serai encore mieux. (si j'en demande trop dite le moi)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT FILM.id, COUNT(A.acteurID) AS nbActeur FROM FILM JOIN FILM_ACTEUR A ON FILM.id=A.filmID WHERE A.acteurID IN (1,2,...) GROUP BY A.filmID //Et je ne récupère que les tuples où nbActeur est égale à la taille de la liste d'acteur.
J'aimerai donc avoir vos avis expert ou une autre alternative.
Merci.
PS: c'est pour une toute petit application en C++ (Qt) donc j'utilise SQLite.
Partager