2012-03-28 57 views
0

我有两个表:加入包括数

事件和events_actions

events columns: 

event_id 
user_id 
event_name 

events_actions columns: 

action_id 
user_id 
event_name 

他们有两个表中一个共同的领域是EVENT_NAME

我想告诉所有的事件为用户,但是,只有当他们有一些event_actions链接到他们(由event_name链接)

我可以通过拉user_id所有事件,然后显示前确保同名的event_actions> 0,但有没有办法在一个SQL查询中做到这一点?

我使用的是MySQL

回答

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

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

@卡帕非常感谢 – 2012-03-28 15:13:53

+0

欢迎您:) – kappa 2012-03-28 15:22:45

1

首先,应该有event_id在桌子上events_actions,不event_name。那么,假设event_name是独一无二的,你可以做到这一点查询:

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谢谢你的建议,它的赞赏 – 2012-03-28 15:14:26