Bonjour,
Je seche sur la mise en place de la requete entre trois tables user, journal, abonnement (abonnement faisant la jointure entre les deux autres)
table user
table journal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE `user` ( `id` tinyint(4) NOT NULL auto_increment, `name` varchar(6) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=6 ; INSERT INTO `user` (`id`, `name`) VALUES (1, 'alain'); INSERT INTO `user` (`id`, `name`) VALUES (2, 'bruno'); INSERT INTO `user` (`id`, `name`) VALUES (3, 'claude'); INSERT INTO `user` (`id`, `name`) VALUES (4, 'daniel'); INSERT INTO `user` (`id`, `name`) VALUES (5, 'eric');
Table abonnement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE `journal` ( `jid` tinyint(4) NOT NULL default '0', `jname` varchar(6) NOT NULL default '', PRIMARY KEY (`jid`) ) TYPE=MyISAM; INSERT INTO `journal` (`jid`, `jname`) VALUES (1, 'monde'); INSERT INTO `journal` (`jid`, `jname`) VALUES (2, 'libe'); INSERT INTO `journal` (`jid`, `jname`) VALUES (3, 'figaro');
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE `abonnement` ( `id` tinyint(4) NOT NULL default '0', `jid` tinyint(4) NOT NULL default '0' ) TYPE=MyISAM; INSERT INTO `abonnement` (`id`, `jid`) VALUES (1, 1); INSERT INTO `abonnement` (`id`, `jid`) VALUES (1, 2); INSERT INTO `abonnement` (`id`, `jid`) VALUES (2, 1); INSERT INTO `abonnement` (`id`, `jid`) VALUES (4, 3); INSERT INTO `abonnement` (`id`, `jid`) VALUES (5, 1);Maintenant comment faire pour obtenir la liste des user qui ne sont pas abonnés au monde j'ai essayé en rajoutant "where j.jid <> 1" mais le résultant n'est pas celui souhaité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 La requête suivante donne la liste des abonnements : select u.name, j.jname from user AS u inner join abonnement AS a on u.id = a.id inner join journal AS j on a.jid = j.jid name | jname --------------- alain | monde bruno | monde eric | monde alain | libe daniel | figaro
Car d'une part alain est abonné au monde et je voudrais vois aussi dans la liste claude qui n'est abonné à rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 select u.name, j.jname from user AS u inner join abonnement AS a on u.id = a.id inner join journal AS j on a.jid = j.jid where j.jid <> 1 name | jname -------------------- alain | libe daniel | figaro
Bref voici le résultat que je souhaite avoir :
Qqs précisions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 name | jname -------------------- claude | NULL daniel | figaro
Mon SGBD : MySQL 4.0.17
En une seule requête
Merci pour votre aide
Partager