如何修复SQL多表关联查询时错误使用ID列而非GenreID列的问题
错误原因
你使用的NATURAL JOIN会自动匹配两张表中名称完全相同的列作为连接条件,你的Animes表和Genres表都存在名为ID的字段,所以连接逻辑默认是Animes.ID = Genres.ID,完全不符合你需要的Animes.GenreID = Genres.ID的关联规则。
修复方案
推荐使用INNER JOIN显式指定连接条件,这种写法逻辑更清晰,也不会因为后续表新增同名字段出现隐性错误,修改后的代码如下:
import sqlite3 conn = sqlite3.connect("ShowInformation.db") c = conn.cursor() # 显式指定关联条件:Animes表的GenreID关联Genres表的主键ID c.execute('''SELECT Animes.Name, Genres.GenreName, Animes.GenreID FROM Genres INNER JOIN Animes ON Animes.GenreID = Genres.ID''') item = c.fetchall() print (item) conn.commit() conn.close()
字段前加上表名前缀也可以避免不同表字段重名带来的查询歧义。
内容的提问来源于stack exchange,提问作者ShadowPoke3
相关产品推荐
相关产品推荐

