mysql有多个到多个连接

时间:2012-01-10 13:18:52

标签: mysql many-to-many subquery

我有活动 events_styles events_formats 表格(一个活动可以有多种风格和多种格式) 我正在尝试过滤具有events_styles join和events_formats join的事件。所以查询应该选择所有特定样式和特定格式的事件 - 我到目前为止的尝试:

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的事件? 我确定我需要将第二个和第三个查询组合成一个子查询,但我不确定语法 - 谢谢

1 个答案:

答案 0 :(得分: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;

通过加入format_id而不是event_id,你只会获得event_id = 1,其中没有对应的样式ID为3.这就是你出错的地方: - )