2012-01-10 68 views
2

事件events_stylesevents_formats表(一个事件可以有众多的款式和多种格式) 我想筛选其中有一个events_styles加入和events_formats参加活动。因此,查询应该选择哪些是特定风格和特定格式的所有事件 - 我尝试到目前为止:MySQL的多个多对多连接

SELECT * FROM events 
JOIN events_styles ON events.id = events_styles.event_id 
JOIN events_formats ON events.id = events_formats.format_id 
WHERE events_styles.style_id = 3 AND events_formats.format_id = 1; 

Empty set (0.00 sec) 

SELECT * FROM events_styles 
WHERE events_styles.style_id = 3 
+----------+----------+ 
| event_id | style_id | 
+----------+----------+ 
|  3 |  3 | 
|  2 |  3 | 
|  4 |  3 | 
+----------+----------+ 
3 rows in set (0.00 sec) 

SELECT * FROM events_formats 
WHERE events_formats.format_id = 1  
+----------+-----------+ 
| event_id | format_id | 
+----------+-----------+ 
|  1 |   1 | 
|  3 |   1 | 
|  4 |   1 | 
+----------+-----------+ 
3 rows in set (0.00 sec) 

所以第一个查询应与ID 4返回事件? 我确定我需要将第二个和第三个查询合并到一个子查询中,但是Im不确定语法 - 谢谢

+0

你会踢你自己;你的连接条件events.id = events_formats.format_id应该是events.id = events_formats.event_id – dash 2012-01-10 13:21:20

回答

1

您非常接近!

您的查询应该是:

SELECT * FROM events 
JOIN events_styles ON events.id = events_styles.event_id  
JOIN events_formats ON events.id = events_formats.event_id 
WHERE events_styles.style_id = 3 
AND events_formats.format_id = 1; 

通过加入对业态编号,而不是EVENT_ID你只会变得事项标识= 1,它具有3没有correspoding风格的ID就是你出了错:-)

+0

你的权利 - 我开始踢自己! - 谢谢 – rebelbass 2012-01-10 13:30:03