2011-03-09 40 views
3

下表列出了参加活动的事件和用户之间共同的价值观:MySQL查询列出2个用户

用户                 事件
 乔                       电影
 乔                       商城
 吉尔                           商城
 乔                       饮用水
 爵                   饮用水
 吉尔                           饮用水

我怎样才能运行该表的查询,列出所有属于2个中给出用户之间共同的事件。

我的猜测是,这将需要自我加入,但我不确定。

+0

你可以发布一个预期结果的例子吗? – 2011-03-09 19:59:09

+0

此外,你真的只是寻找2个用户的比较,或者你正在寻找所有事件'乔'与**任何人**共同** – 2011-03-09 20:00:28

回答

5
SELECT * 
FROM myTable joe 
JOIN myTable jill ON jill.User='Jill' AND jill.Event=joe.Event 
WHERE joe.User='Joe' 

这也可行。它有时可以更有效地做这种方式(把所有的条件在JOIN)

SELECT * 
FROM myTable joe 
JOIN myTable jill ON jill.User='Jill' 
    AND jill.Event=joe.Event 
    AND joe.User='Joe' 
+0

真棒,谢谢! :) – DMin 2011-03-09 20:29:28

+0

Finnally used'SELECT joe.event FROM events as joe JOIN events as jill ON jill.user ='Jill'AND jill.event = joe.event WHERE joe.user =“Joe”' - 'AND' &'WHERE'工作。 – DMin 2011-03-09 20:33:51

0
select event from table group by event having count(user) =2 

,不会给你的用户的名称虽然

1
SELECT * 
    FROM myTable t1 
     JOIN myTable t2 
     ON t1.event = t2.event 
     and t2.User="Jill" 
    where 
     t1.user = "Joe" 
0
select eventname from user_event JOIN user_event as t2 USING (eventname) 
where user_event.username="joe" and t2.username="jill" 

在这里,'user_event'是你的表名和表't2'是'user_event“表的别名