2009-10-19 5 views
0

J'ai un problème MySQL:MySQL trouver auteurs sans messages (one-to-many)

J'ai deux tables (messages et auteurs) dans une relation un à plusieurs (puisque chaque message est écrit par un auteur et un auteur peuvent écrire plusieurs articles).

Alors voici les tables:

Auteurs: id: BIGINT, nom: VARCHAR (255) Messages: id: BIGINT, AUTHOR_ID: BIGINT, corps: TEXTE.

Comment puis-je récupérer tous les auteurs sans publication?

Ce que j'ai essayé de faire est:

SELECT * 
FROM Authors 
WHERE id NOT IN (SELECT author_id 
       FROM Posts 
       GROUP BY author_id); 

Mais il prend les âges !!!

Dans les deux tableaux, il y a 300 000 auteurs et 1 000 000 articles!

Un moyen plus rapide?

Merci les gars!

+0

LEFT JOIN/IS NULL est équivalent à NOT IN MySQL: http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is -null-mysql / –

Répondre

3
SELECT * 
FROM Authors 
LEFT JOIN Posts ON (Authors.id = Posts.author_id) 
WHERE Posts.author_id IS NULL 

crédit @John pour la première réponse :)

0

Peut-être cela?

SELECT * FROM Authors a 
WHERE NOT EXISTS (SELECT * 
        FROM Posts p 
        WHERE p.author_id=a.id) 
Questions connexes