获取行号报subquery in FROM must have an alias错误求助
问题根因
触发subquery in FROM must have an alias报错的直接原因是 FROM子句中的子查询未设置别名,SQL语法强制要求所有从子查询生成的派生临时表,必须指定别名供上层查询引用。除此之外你代码中OVER(lvls)引用的窗口lvls未提前定义,后续也会触发语法错误。
修正代码
若你需要给匹配到的guild_id查询结果添加行号,无额外排序/分区需求的话,可直接使用以下修正后的代码:
await pool.query('SELECT row_number() OVER() AS row_num, * FROM (SELECT guild_id FROM levels WHERE guild_id = $1) AS sub', [message.guild.id])
补充说明:
- 末尾的
AS sub就是给子查询添加的别名,别名可自定义为任意合法命名 - 若需要行号按指定字段排序,可在
OVER()括号内补充排序规则,例如按经验值倒序排列则写为OVER(ORDER BY xp DESC) - 若需要按字段分区生成行号,可补充
PARTITION BY规则,例如按用户ID分区则写为OVER(PARTITION BY user_id ORDER BY xp DESC)
内容的提问来源于stack exchange,提问作者Jasme
相关产品推荐
相关产品推荐

