PostgreSQL三表关联查询求助:查询Sally参与的赛事信息
修正后的PostgreSQL查询语句及错误说明
原SQL的错误点
- 语法错误:出现两个
FROM关键字,多表关联需在一个FROM后通过JOIN依次串联表,不能重复写FROM - 字符串常量使用错误:PostgreSQL中字符串值必须用单引号
'包裹,双引号"用于引用表/字段名,原语句里的"Sally"会被解析为字段名而非字符串 - 表名不匹配:你定义的是
People表,但SQL里用了name N,应改为people N - 字段缺失:你要求输出
EventName,但给出的Event表结构中没有该字段,若为笔误(比如实际要输出EventState)可对应替换;若确实存在EventName字段,请检查表结构描述是否遗漏 - 重复关联同一张表:原语句两次关联
Outcome表,会导致逻辑错误,只需通过一次关联串联三个表即可
修正后的查询语句(假设EventName为笔误,替换为EventState;若实际存在EventName字段,直接改回即可)
SELECT e.eventstate AS eventname, -- 若Event表有eventname字段,直接写e.eventname EXTRACT(MONTH FROM e.eventdate) AS event_month, e.eventtemp, o.eventtime FROM people n JOIN outcome o ON n.id = o.id JOIN event e ON o.eventid = e.eventid WHERE n.name = 'Sally';
说明
- 三个表通过
JOIN依次关联:先通过id关联People和Outcome,再通过eventid关联Outcome和Event - 用
AS给提取的月份字段起别名event_month,让结果更易读 - 字符串
'Sally'用单引号包裹,符合PostgreSQL语法规范 - 表别名
n(People)、o(Outcome)、e(Event)简化了字段引用
内容的提问来源于stack exchange,提问作者data_life
相关产品推荐
相关产品推荐

