Recherche dans une table avec comparaison par pair

Fermé
waren56 Messages postés 63 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 30 mai 2022 - Modifié le 5 oct. 2019 à 21:54
yg_be Messages postés 23316 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 - 5 oct. 2019 à 23:17
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 :)
A voir également:

1 réponse

yg_be Messages postés 23316 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 Ambassadeur 1 552
Modifié le 5 oct. 2019 à 22:51
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.
0
waren56 Messages postés 63 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 30 mai 2022
Modifié le 5 oct. 2019 à 22:46
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...
0
waren56 Messages postés 63 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 30 mai 2022
5 oct. 2019 à 22:51
- 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.
0
waren56 Messages postés 63 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 30 mai 2022
5 oct. 2019 à 23:01
Je vais essayer ce que vous m'avez dit, merci. Je reviendrai ici.
0
waren56 Messages postés 63 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 30 mai 2022
5 oct. 2019 à 23:10
Je n'ai pas compris pourquoi je devais changer ça en jointure externe. Quel est le but ?
0
yg_be Messages postés 23316 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 1 552 > waren56 Messages postés 63 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 30 mai 2022
Modifié le 5 oct. 2019 à 23:20
quelle est la différence entre une jointure normale et une jointure externe?
fais une jointure externe, tu verras la différence.
le critère de jointure se spécifie avec ON, pas avec WHERE.
0