MySQL高效加入" in"没有重复

时间:2015-10-20 04:53:08

标签: mysql join

我有event

+----------+------------+
| event_id | event_name |
+----------+------------+
|        1 | event1     |
|        2 | event2     |
|        3 | event3     |
|        4 | event4     |
+----------+------------+

event_performer表格

+--------------------+----------+--------------+
| event_performer_id | event_id | performer_id |
+--------------------+----------+--------------+
|                  1 |        1 |            1 |
|                  2 |        1 |            2 |
|                  3 |        2 |            1 |
|                  4 |        2 |            2 |
|                  5 |        3 |            3 |
|                  6 |        3 |            4 |
|                  7 |        4 |            3 |
|                  8 |        4 |            4 |
+--------------------+----------+--------------+

我想通过执行者ID 1和2获取所有事件,因此我运行以下查询:

select event.* from event
join event_performer
on event.event_id = event_performer.event_id 
and performer_id in (1,2)
order by event_name

当我这样做时,我显然会得到重复的事件(两个用于event_id 1,两个用于event_id 2)。什么是MySQL中最有效的方法删除重复项,以便我获得每个事件记录一次?

一个想法是使用select distinct event.*对于大量字段和记录效率如何?

请注意,示例表过于简单。每个表都有更多字段和更多记录。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Group BY

select event.event_id, event.event_name from event
join event_performer
on event.event_id = event_performer.event_id 
and performer_id in (1,2)
GROUP BY event_name, event.event_id
order by event_name

但请注意,如果您在列上创建了索引,则使用GROUP BY与使用DISTINCT类似。但是如果你还没有创建索引,那么我建议你使用DISTINCT,因为它比GROUP BY快。