mysql 多个多对多连接

标签 mysql many-to-many subquery

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

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

最佳答案

你非常接近!

您的查询应该是:

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。这就是您出错的地方:-)

关于mysql 多个多对多连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8803881/

相关文章:

复杂查询的mysql转储

php - 这个 Jquery 帖子有问题吗?

many-to-many - Spring Data JPA 多对多保存设置

mysql - Django 将 AND 和 OR 查询与 ManyToMany 字段结合起来

doctrine - Symfony 1.4 Doctrine - 中间表中带有额外字段的多对多关系

mysql - 将多个子查询的结果合并到一个集合中

mysql - 如何计算字符串特定位置中特定字符的出现次数 - MYSQL 5.5

mysql - Rails change_column 错误:Mysql2::Error: COLLATION 'utf8_general_ci' 对于字符集 'binary' 无效

Windows 中的 MySQL 小写表名 Unix 上的大写名称

mysql - 带有where子句的子查询mysql