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

使用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)

额外优化提示

  1. 给Name字段加上表别名N,避免多表存在同名字段时引发歧义
  2. cte2里不需要选择O.Time(最终查询没用到),去掉能减少不必要的数据读取
  3. 排序时尽量用字段名(比如cte2.EDate)代替位置序号2,提升SQL的可读性和可维护性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06