Bonjour,
j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte :
- j'ai une table "messages" (avec un id_message, un message....)
- j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont li=E9es.
Pour obtenir tous les messages ayant un commentaire : =E7a va, je fais
un
SELECT m.*, c.* FROM messages m, commentaire c WHERE
(m.idmessage=3Dc.id_message)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas
de commentaire : comment je peut faire ?
SELECT m.*, c.* FROM messages m, commentaire c WHERE
(la_table_commentaire_ne_contient_pas_de_ligne avec :
id_message=3Dm.id_message )
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JustMe
Paul a émis l'idée suivante :
Bonjour, j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte : - j'ai une table "messages" (avec un id_message, un message....) - j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont liées.
Pour obtenir tous les messages ayant un commentaire : ça va, je fais un SELECT m.*, c.* FROM messages m, commentaire c WHERE (m.idmessage=c.id_message)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas de commentaire : comment je peut faire ? SELECT m.*, c.* FROM messages m, commentaire c WHERE (la_table_commentaire_ne_contient_pas_de_ligne avec : id_message=m.id_message )
Merci beaucoup de votre aide.
select * from messages where idmessage not in (select id_message from commentaire );
Paul a émis l'idée suivante :
Bonjour,
j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte :
- j'ai une table "messages" (avec un id_message, un message....)
- j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont liées.
Pour obtenir tous les messages ayant un commentaire : ça va, je fais
un
SELECT m.*, c.* FROM messages m, commentaire c WHERE
(m.idmessage=c.id_message)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas
de commentaire : comment je peut faire ?
SELECT m.*, c.* FROM messages m, commentaire c WHERE
(la_table_commentaire_ne_contient_pas_de_ligne avec :
id_message=m.id_message )
Merci beaucoup de votre aide.
select * from messages where idmessage not in (select id_message from
commentaire );
Bonjour, j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte : - j'ai une table "messages" (avec un id_message, un message....) - j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont liées.
Pour obtenir tous les messages ayant un commentaire : ça va, je fais un SELECT m.*, c.* FROM messages m, commentaire c WHERE (m.idmessage=c.id_message)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas de commentaire : comment je peut faire ? SELECT m.*, c.* FROM messages m, commentaire c WHERE (la_table_commentaire_ne_contient_pas_de_ligne avec : id_message=m.id_message )
Merci beaucoup de votre aide.
select * from messages where idmessage not in (select id_message from commentaire );
Bruno Baguette
Paul a écrit :
Bonjour, j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte : - j'ai une table "messages" (avec un id_message, un message....) - j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont liées.
Pour obtenir tous les messages ayant un commentaire : ça va, je fais un SELECT m.*, c.* FROM messages m, commentaire c WHERE (m.idmessage=c.id_message)
Si je puis me permettre, évitez le *, ca vous évitera bien des problèmes ! Il est préférable d'indiquer les différents champs dont vous avez besoin, l'un après l'autre. :-)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas de commentaire : comment je peut faire ? SELECT m.*, c.* FROM messages m, commentaire c WHERE (la_table_commentaire_ne_contient_pas_de_ligne avec : id_message=m.id_message )
Une jointure externe devrait faire l'affaire :
SELECT messages .* FROM messages LEFT JOIN commentaire ON messages.idmessage=commentaire.id_message WHERE commentaire.id_message IS NULL
Il y a une autre solution, plus élégante (à mon goût) qui peut se faire avec le prédicat NOT EXISTS :
SELECT messages .* FROM messages WHERE NOT EXISTS ( SELECT * FROM commentaire WHERE commentaire.id_message = messages.idmessage );
Notez ici que le * du SELECT qui se trouve dans le NOT EXISTS n'a pas d'influence étant donné que l'on ne récupère pas des données avec cette sous-requête, mais que l'on ne fait que tester l'existence de données ! :-)
Bien à vous,
-- Bruno BAGUETTE -
Paul a écrit :
Bonjour,
j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte :
- j'ai une table "messages" (avec un id_message, un message....)
- j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont liées.
Pour obtenir tous les messages ayant un commentaire : ça va, je fais
un
SELECT m.*, c.* FROM messages m, commentaire c WHERE
(m.idmessage=c.id_message)
Si je puis me permettre, évitez le *, ca vous évitera bien des problèmes
! Il est préférable d'indiquer les différents champs dont vous avez
besoin, l'un après l'autre. :-)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas
de commentaire : comment je peut faire ?
SELECT m.*, c.* FROM messages m, commentaire c WHERE
(la_table_commentaire_ne_contient_pas_de_ligne avec :
id_message=m.id_message )
Une jointure externe devrait faire l'affaire :
SELECT messages .*
FROM messages
LEFT JOIN commentaire ON messages.idmessage=commentaire.id_message
WHERE commentaire.id_message IS NULL
Il y a une autre solution, plus élégante (à mon goût) qui peut se faire
avec le prédicat NOT EXISTS :
SELECT messages .*
FROM messages
WHERE NOT EXISTS
(
SELECT *
FROM commentaire
WHERE commentaire.id_message = messages.idmessage
);
Notez ici que le * du SELECT qui se trouve dans le NOT EXISTS n'a pas
d'influence étant donné que l'on ne récupère pas des données avec cette
sous-requête, mais que l'on ne fait que tester l'existence de données ! :-)
Bonjour, j'ai besoin d'aide pour efectuer une requete SQL.
Voici le contexte : - j'ai une table "messages" (avec un id_message, un message....) - j'ai une table "commentaires" (avec un id_commentaire, id_message)
donc les 2 tables sont liées.
Pour obtenir tous les messages ayant un commentaire : ça va, je fais un SELECT m.*, c.* FROM messages m, commentaire c WHERE (m.idmessage=c.id_message)
Si je puis me permettre, évitez le *, ca vous évitera bien des problèmes ! Il est préférable d'indiquer les différents champs dont vous avez besoin, l'un après l'autre. :-)
Mais je souhaite maintenant obtenir la liste des messages n'ayant pas de commentaire : comment je peut faire ? SELECT m.*, c.* FROM messages m, commentaire c WHERE (la_table_commentaire_ne_contient_pas_de_ligne avec : id_message=m.id_message )
Une jointure externe devrait faire l'affaire :
SELECT messages .* FROM messages LEFT JOIN commentaire ON messages.idmessage=commentaire.id_message WHERE commentaire.id_message IS NULL
Il y a une autre solution, plus élégante (à mon goût) qui peut se faire avec le prédicat NOT EXISTS :
SELECT messages .* FROM messages WHERE NOT EXISTS ( SELECT * FROM commentaire WHERE commentaire.id_message = messages.idmessage );
Notez ici que le * du SELECT qui se trouve dans le NOT EXISTS n'a pas d'influence étant donné que l'on ne récupère pas des données avec cette sous-requête, mais que l'on ne fait que tester l'existence de données ! :-)