与连接表的多对多关系

时间:2015-03-23 10:03:21

标签: mysql sql

我有2个具有多对多关系的模型,eventcategory。我正在尝试整理一个查询,让我通过类别名称获取事件。

我有以下表格:

类别

id | name

事件

id | name

event_categories_join

category_id | event_id

我已成功通过内部加入数据透视表从类别ID获取事件。

SELECT * FROM event
INNER JOIN event_categories_join
ON event.id = event_categories_join.event_id
WHERE event_categories_join.category_id = 5

如何通过名称而不是ID来执行此操作?


修改

我有三个类别,音​​乐会,复活节和会谈。我也是一个活动,伦敦语法,属于音乐会和复活节类别。现在我想编写一个查询,我提供该类别的名称,并获取所属事件 - 在本例中为Concert。

2 个答案:

答案 0 :(得分:1)

你需要另一个加入。尝试像

这样的东西
SELECT * FROM event
INNER JOIN event_categories_join ON event.id = event_categories_join.event_id
INNER JOIN category ON category.id = event_categories_join.category_id
WHERE category.name = 'my_category';

作为旁注:您应该重新考虑将event_categories_join重命名为event_categories。或许event_categories_mapping。对于有问题的域来说,这可能更为真实,而连接命名与我们处理关系数据库的事实紧密相关。

答案 1 :(得分:-1)

SELECT temp.* FROM (
  SELECT event.id as eventid,event.name as eventName ,event_categories_join.* FROM event AS event 
INNER JOIN event_categories_join
ON event.eventid= event_categories_join.event_id 
) AS temp 
INNER JOIN category AS category ON 
category.id =temp.category_id
WHERE category.name = 'Maeh'