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

如何关联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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:09:03