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
相关产品推荐
相关产品推荐

