You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何简化关联查询,无需子查询且避免新增多对多关联?

简化查询的可行方案

嘿,我来帮你简化这个查询!完全可以不用嵌套子查询,直接通过表连接就能实现需求,而且不需要新增多对多关联表来增加复杂度。

你的原查询是先用子筛选出目标作者的书籍对应的分类ID,再关联分类表。其实可以直接把Book表和Genre表做连接,同时加上作者ID的过滤条件,逻辑更直观,代码也更简洁:

SELECT DISTINCT genre.id, genre.genre_id, genre.genre_name, genre.genre_descr
FROM book
JOIN genre ON book.genre_id = genre.genre_id
WHERE book.author_id = 7654;

这里要注意加上DISTINCT关键字——因为同一个作者可能有多本书属于同一个分类,如果不加的话,查询结果会重复返回同一个分类的信息。加上DISTINCT就能确保每个分类只出现一次。

如果担心性能问题,可以给book.author_id和book.genre_id这两个字段创建索引,这样数据库能更快定位到目标数据,尤其是书籍表数据量较大的时候。

当然,你提到的多对多关联表(比如AuthorGenre)是更规范的设计,但如果只是临时需求或者不想增加系统复杂度,上面这个简化后的查询完全能满足要求,而且可读性更好。

内容的提问来源于stack exchange,提问作者Roman Shmandrovskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:17:51