使用Python+psycopg2操作PostgreSQL时CTE语法错误求助
问题解决:多CTE的SQL语法错误
错误核心
你的SQL里重复使用了WITH关键字来定义多个CTE,这是基础语法错误——多个CTE只需要在开头写一次WITH,后续的CTE直接用逗号分隔即可,不管是纯SQL环境还是通过psycopg2执行都会触发这个报错。
修正后的代码
query = ("""WITH cte AS (SELECT E.Event, O.Time AS "SmithTime" FROM event E JOIN outcome O ON E.EventID = O.EventID JOIN name N ON N.ID = O.ID WHERE N.Name = 'Smith'), cte2 AS (SELECT E.Event, E.EDate, E.ETemp FROM event E JOIN outcome O ON E.EventID = O.EventID JOIN name N ON N.ID = O.ID) SELECT cte2.Event, cte2.EDate, cte2.ETemp, cte.SmithTime FROM cte2 JOIN cte ON cte2.Event = cte.Event ORDER BY cte2.EDate ASC""") query_result = pd.read_sql(query, conn) print(query_result)
额外优化提示
- 给
Name字段加上表别名N,避免多表存在同名字段时引发歧义 cte2里不需要选择O.Time(最终查询没用到),去掉能减少不必要的数据读取- 排序时尽量用字段名(比如
cte2.EDate)代替位置序号2,提升SQL的可读性和可维护性
内容的提问来源于stack exchange,提问作者data_life
相关产品推荐
相关产品推荐

