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

Python中正确编写SQL INNER JOIN及代码错误排查

IMDb导演评分查询问题排查

需求说明

基于本地存储的IMDb数据库,查询是否存在所有执导作品评分均高于9分的导演。

涉及表结构

Crew表

  • 字段:title_id(作品ID)、person_id(人员ID)、category(人员职位类别)、job(具体工作)、characters(饰演角色)
  • 样例数据:
[('tt0000060', 'nm0005690', 'director', None, '\N'),
('tt0000060', 'nm0005658', 'cinematographer', None, '\N'),
('tt0000361', 'nm0349785', 'director', None, '\N'),
('tt0000376', 'nm0466448', 'actor', None, '\N'),
('tt0000376', 'nm0617272', 'actress', None, '["Salome"]')...

Ratings表

  • 字段:title_id(作品ID)、rating(作品评分)、votes(评分人数)
  • 样例数据:
[('tt0000060', 7.8, 59),
('tt0000361', 8.1, 10),
('tt0000376', 7.8, 6),
('tt0000417', 8.2, 38836),
('tt0000505', 8.1, 11),
('tt0000738', 7.8, 11)...

原有问题代码

import sqlalchemy
from sqlalchemy import create_engine, text, inspect
engine = create_engine('sqlite:///newIMDB.db')
inspector = inspect(engine)
print(inspector.get_table_names()) #['crew', 'episodes', 'people', 'ratings', 'titles']
conn = engine.connect()

stmt = text ("SELECT category,rating FROM(SELECT * FROM crew INNER JOIN ratings
ON crew.title_id = ratings.title_id)  
WHERE category=director AND  rating  > 9 LIMIT 10;" )

result = conn.execute(stmt)
result.fetchall()

代码存在的错误

  • SQL语法错误:字符串常量未加引号
    条件category=director中,director是字符串类型的字段值,没有加单引号包裹,SQL执行时会将其识别为列名,直接抛出字段不存在的错误,正确写法为category='director'。
  • Python语法错误:多行字符串未正确声明
    传入text()的SQL语句直接在双引号内换行,Python不支持普通双引号包裹的字符串未经转义直接换行,会直接触发语法报错,需要用三引号"""包裹多行SQL内容。
  • 核心逻辑错误:未实现「所有作品评分均高于9分」的判断
    现有语句仅筛选单条记录中「职位为导演、单部作品评分高于9分」的条目,没有按导演IDperson_id分组统计,也没有判断导演所有作品的最低评分是否大于9,完全无法匹配需求。
  • 查询字段缺失
    查询结果仅返回category和rating字段,没有返回导演唯一标识person_id,即使查询执行成功也无法定位到具体导演。

修正后参考实现

# 正确查询逻辑:按导演分组,筛选所有执导作品最低评分>9的导演
stmt = text("""
SELECT c.person_id, MIN(r.rating) AS min_director_rating
FROM crew c
INNER JOIN ratings r ON c.title_id = r.title_id
WHERE c.category = 'director'
GROUP BY c.person_id
HAVING MIN(r.rating) > 9
""")
result = conn.execute(stmt)
print(result.fetchall())

注:如果返回结果为空,说明不存在满足条件的导演。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:30:52