2012-07-20 2 views
0

J'ai deux tables dans MySQL avec la structure suivante:Trouver des entrées mysql sans correspondance dans d'autres tables

Events: id 
Events_artists: event_id, more columns 

Je voudrais trouver les event_ids dans le tableau events_artists qui ne disposent pas d'un match avec l'id dans événements.

La seule chose que je suis venu avec est jusqu'à présent ceci:

SELECT * FROM events,events_artists WHERE events_artists.event_id!=events.id 

Cependant, c'est la merde et renvoie essentiellement la table.

Est-ce que quelqu'un sait comment résoudre ce problème?

Merci!

Charles

SOLUTION TROUVE, grâce à Andrzej Bobak

select * from events_artists où EVENT_ID pas (select id d'événements)

Répondre

3

Que diriez-vous de cette approche?

select * from events_artists where event_id is null or event_id not in (select id from events) 
+0

Merci! Fonctionne parfaitement! – weltschmerz

+1

Content de vous aider. Dans le futur, exécutez les requêtes proposées avec "explain" ou "explain analysis" (dépend du serveur de base de données). Il vous montrera le plan de requête et vous permettra d'optimiser les requêtes. –

+0

Encore une question, cependant: Comment se fait-il que votre solution renvoie un résultat avec 0 lignes, mais que les solutions de stb retournent plus de 0? Est-ce vraiment la même chose? – weltschmerz

1
select * from events_artists a 
left join events b on a.id = b.id 
where b.id is null 

votre approche utilise un produit cartésien qui réunit tous les ramer les uns avec les autres. Donc, vos critères where filtrent juste votre résultat contenant les lignes qui ne correspondent pas, mais cela sera beaucoup à cause du produit cartésien

+0

Merci! C'est un peu lent en quelque sorte, tombom a déjà mentionné qu'il pourrait y avoir quelque chose de mal avec ma base de données. Je vais devoir vérifier cela. – weltschmerz

+0

Comme dit tombom, cela devrait normalement fonctionner correctement. Je m'attendais à ce que la déclaration «pas dans» soit plus lente que la nôtre. – stb

+0

Comme je l'ai commenté la solution de tombom. Exécutez l'analyseur de requête et voyez si votre approche ou la mienne est meilleure pour un ensemble donné de données. –

Questions connexes