2012-03-28 3 views
0

J'ai deux tables:Joignez-y compris le nombre

événements et events_actions

events columns: 

event_id 
user_id 
event_name 

events_actions columns: 

action_id 
user_id 
event_name 

ils ont un champ commun dans les deux tables qui est event_name

Je veux montrer tous les événements pour un utilisateur, mais, seulement s'ils ont des event_actions liés à eux (liés par event_name)

Je peux le faire en tirant tous les événements par user_id et ensuite avant d'afficher assurez-vous même nom event_actions> 0 mais existe-t-il un moyen de le faire dans une requête SQL?

J'utilise MySQL

Répondre

1
select * 
from events ev 
where exists (select 1 from event_actions ea where ev.event_name = ea.event_name) 

ou

select ev.event_name,count(ea.action_id) 
from events ev,event_actions ea 
where ev.event_name = ea.event_name 
group by ea.event_name 
having count(ea.action_id) > 0 
+0

@ kappa Merci beaucoup –

+0

vous êtes les bienvenus :) – kappa

1

Tout d'abord, il devrait y avoir event_id sur la table events_actions, non event_name. Eh bien, en supposant que event_name est unique, vous pouvez faire cette requête:

SELECT E.user_id, E.event_name 
FROM dbo.events E 
INNER JOIN (SELECT DISTINCT event_name, user_id FROM dbo.events_actions) EA 
ON E.user_id = EA.user_id AND E.event_name = EA.event_name 
+0

@ lamak merci pour les conseils, son apprécié –

Questions connexes