PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 19/02/2020 13:12:39

francois
Membre

jointures sql entre 3 tables

Je veux faire une requête qui retourne un résultat en négatif.
une table films
une table pays
une table box-office qui va chercher le titre du film dans la table films et le nom du pays dans la table payd

la requête ne peut faire qu'un seul select, le but trouver la liste des pays dans lesquels un film n'a pas été  pas été présent au box office.
Exemple, le film "le baltringue" a été vu en France mais pas en Italie, le résultat de la requête doit retourner "Italie, le baltringue".

Hors ligne

#2 19/02/2020 13:14:58

rjuju
Administrateur

Re : jointures sql entre 3 tables

Quel problème rencontrez-vous exactement ?

Hors ligne

#3 19/02/2020 13:35:59

francois
Membre

Re : jointures sql entre 3 tables

je n'arrive pas à récupérer le résultat attendu.

select p.pays, f.film from box_offices bx inner join films f on bx.film_id = f.id inner join pays p on bx.pays_id = p.id;

Cette requête me renvoie liste des films et pays présent au box office, je cherche à faire l'opposé, obtenir la liste des films et pays absents aux box office.

Hors ligne

#4 19/02/2020 14:16:32

Marc Cousin
Membre

Re : jointures sql entre 3 tables

Un truc de ce genre ?

select p.pays, f.film from bx.film_id = f.id cross join pays p where not exists (select 1 from box_offices bx where bx.film_id = f.id and bx.pays_id = p.id) 

Dernière modification par Marc Cousin (19/02/2020 14:16:57)


Marc.

Hors ligne

#5 19/02/2020 14:35:28

francois
Membre

Re : jointures sql entre 3 tables

Je viens de tester mais il y a une erreur  sur le "=" de  "from bx.film_id = f.id".
ERROR:  syntax error at or near "="

Hors ligne

#6 19/02/2020 14:49:23

rjuju
Administrateur

Re : jointures sql entre 3 tables

Il manque une partie de la requête effectivement.  J'imagine qu'il voulait dire:

select p.pays, f.film from box_offices bx inner join films f on bx.film_id = f.id cross join pays p where not exists (select 1 from box_offices bx where bx.film_id = f.id and bx.pays_id = p.id) 

Hors ligne

#7 19/02/2020 15:45:51

francois
Membre

Re : jointures sql entre 3 tables

C'est bon mais est-il possible de le faire avec un seul select çàd sans passer par la condition no exists, merci

Hors ligne

#8 19/02/2020 15:52:31

rjuju
Administrateur

Re : jointures sql entre 3 tables

Probablement, mais pourquoi cette solution ne vous convient pas ?  Le fait que le mot clé SELECT apparaisse 2 fois n'est pas un bon argument.

Hors ligne

#9 19/02/2020 16:06:18

francois
Membre

Re : jointures sql entre 3 tables

je suis d'accord avec vous c'est que je voulais faire mais c'est le challenge et c'est compliqué de remplacer le no exists

Hors ligne

#10 19/02/2020 16:35:16

rjuju
Administrateur

Re : jointures sql entre 3 tables

Je ne suis pas certain de comprendre quel est votre challenge.

Hors ligne

#11 19/02/2020 16:58:34

francois
Membre

Re : jointures sql entre 3 tables

C'est une obligation de n'avoir qu'un seul select même si je suis d'accord avec vous.

Hors ligne

#12 19/02/2020 23:14:58

Re : jointures sql entre 3 tables

Salut
Peut être...

select ... from (pays cross join film) left join box_offices on box_offices.idfilm=film.idfilm
where box_offices.idfilm is null

@+

Hors ligne

Pied de page des forums