如何关联SQL两张表并查询展示单条记录对应的多个流派信息
核心问题排查
- 关联条件逻辑错误:原SQL中
ON a.GenreID1 AND a.GenreID2 = g.ID的实际生效逻辑是「判断Animes表的GenreID1字段非零/非空 且 GenreID2等于Genres表的ID」,完全没有实现两个流派ID同时关联流派表的需求 - 单表关联次数不足:只关联了一次Genres表,无法同时映射两个不同流派ID对应的名称,SELECT语句中重复写两次
GenreName也只会返回同一个流派的名称
修改方案(双流派分开展示)
通过两次关联Genres表并设置不同别名,分别匹配GenreID1和GenreID2,同时使用LEFT JOIN避免某一流派ID为空时丢失整条动漫记录:
import sqlite3 conn = sqlite3.connect("ShowInformation - Copy.db") c = conn.cursor() # 修改后的SQL语句 c.execute(''' SELECT a.name, g1.GenreName AS GenreName1, g2.GenreName AS GenreName2, a.Synopsis, a.EPCount, a.AgeRating, a.Score, a.Studio, a.Popularity FROM Animes AS a LEFT JOIN Genres AS g1 ON a.GenreID1 = g1.ID LEFT JOIN Genres AS g2 ON a.GenreID2 = g2.ID; ''') item = c.fetchall() print(item[0]) print(item)
补充:多流派合并为单个字段输出
如果需要把两个流派合并为同一个字段(比如用/分隔),可以改用如下SQL逻辑:
SELECT a.name, GROUP_CONCAT(g.GenreName, '/') AS Genres, a.Synopsis, a.EPCount, a.AgeRating, a.Score, a.Studio, a.Popularity FROM Animes AS a LEFT JOIN Genres AS g ON g.ID IN (a.GenreID1, a.GenreID2) GROUP BY a.id -- 此处替换为Animes表的主键字段即可
内容的提问来源于stack exchange,提问作者ShadowPoke3
相关产品推荐
相关产品推荐

