Recherche dans une table avec comparaison par pair
waren56
Messages postés
83
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir,
Je travail sur la base de données sakila :

Je tente de répondre à cette question depuis une heure :
Existe-t-il des acteurs qui ne jouent avec aucun autre acteur ?
Mon idée serait de selectionner tous les acteurs (col1), tous les acteurs avec lesquelles ils ont joué (col2) et leurs films en communs (col3) comme ceci :

J'ai mis deux fois la même table pour y voir plus clair et voici mon code pour l'instant :

Une fois que j'obtiens ça, pour répondre à la question, il ne me suffirait plus qu'à compter le nombre d'acteurs avec lesquelles chaque acteurs à joué et selectionner les acteurs ayant joué avec 0 autres acteurs.
(Aussi je n'arrive pas à faire le produit cartésien sur une table (afficher comme je l'ai fait une même table deux fois) du coup je suis passé par un WITH AS qui n'est pas une solution optimale).
En vous remerciant par avance :)
Je travail sur la base de données sakila :

Je tente de répondre à cette question depuis une heure :
Existe-t-il des acteurs qui ne jouent avec aucun autre acteur ?
Mon idée serait de selectionner tous les acteurs (col1), tous les acteurs avec lesquelles ils ont joué (col2) et leurs films en communs (col3) comme ceci :

J'ai mis deux fois la même table pour y voir plus clair et voici mon code pour l'instant :

Une fois que j'obtiens ça, pour répondre à la question, il ne me suffirait plus qu'à compter le nombre d'acteurs avec lesquelles chaque acteurs à joué et selectionner les acteurs ayant joué avec 0 autres acteurs.
(Aussi je n'arrive pas à faire le produit cartésien sur une table (afficher comme je l'ai fait une même table deux fois) du coup je suis passé par un WITH AS qui n'est pas une solution optimale).
En vous remerciant par avance :)
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, peux-tu publier le texte de tes requêtes, au lieu d'images?
je suis un peu déçu que tu renonces à travailler après seulement une heure.
connais-tu le concept de jointure externe? qu'est-ce qui t’empêche de faire le produit cartésien d'une table?
ta syntaxe me semble extraordinairement compliquée, pourquoi pas plutôt:select t1.actor_id as actor_id1, t2.actor_id as actor_id2 from film_actor as t1, film_actor as t2 where t1.film_id = t2.film_id and t1.actor_id <> t2.actor_id
il te suffira ensuite de transformer cela en jointure externe.-
WITH T1 AS (SELECT actor_id, film_id FROM sakila.film_actor), T2 AS (SELECT actor_id, film_id FROM sakila.film_actor) SELECT T1.actor_id AS actor_id_1, T1.film_id AS film_id_1, T2.actor_id AS actor_id_2 FROM T1 NATURAL JOIN T2 WHERE T1.actor_id != T2.actor_id AND T1.film_id = T2.film_id
Du coup vous pouvez me dire comment y répondre svp ? J'ai quand même pris du temps à faire ces schémas... -
- Oui je vois ce qu'est un LEFT JOIN mais je ne vois pas pourquoi et/ou comment devrais-je l'appliquer dans ce cas là, il s'agit juste de faire une comparaison non ?
- Le prof m'a dit que pour faire le produit cartésien je pouvais rappeler la même table sous le même nom, par exemple :WITH
T1 AS (SELECT actor_id, film_id FROM sakila.film_actor),
SELECT actor_id, film_id, actor_id, film_id FROM T1,T1
Mais ça ne évidemment pas. -
-
-