我有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.*
对于大量字段和记录效率如何?
请注意,示例表过于简单。每个表都有更多字段和更多记录。
答案 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快。