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

PostgreSQL 13.0中查询Chris开头演员及姓氏的SQL排错与实现

修正SQL语法错误并实现演员列表需求

需求说明

  • 按字母顺序列出名字以Chris开头的电影演员
  • 按升序列出这些演员的姓氏

原错误SQL及报错信息

错误SQL代码

SELECT nome_estrela
FROM ESTRELAS
WHERE nome_estrela IN (SELECT split_part('', 'nome_estrelas', 00.)
                       FROM ESTRELAS
                      ORDER BY nome_estrela ASC
                      WHERE nome_estrela ( SELECT split_part('nome_estrela', ' ', 00.) 
                                               FROM ESTRELAS
                                               WHERE nome_estrela LIKE 'Chris%'
                                              )
                       );

报错详情(翻译后)

/usr/local/bundle/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:156:in `exec': PG::SyntaxError: ERROR:  语法错误位于或接近"WHERE"
LINE 13:                       WHERE nome_estrela ( SELECT split_part...
                               ^
 (Sequel::DatabaseError)

错误原因分析

  1. 子查询语法顺序错误:ORDER BY被错误放置在WHERE之前,SQL子句的正确顺序应为FROM → WHERE → ORDER BY
  2. split_part函数参数错误:该函数标准格式为split_part(目标字符串, 分隔符, 索引位置),原SQL中参数顺序、目标字符串及索引值(使用无效的00.)均不符合要求
  3. 条件表达式无效:nome_estrela (SELECT ...)缺少必要的比较运算符(如IN、=),不符合SQL语法规范
  4. 嵌套子查询逻辑冗余:多层嵌套完全不必要,逻辑混乱直接引发语法错误

修正后的SQL实现

1. 列出所有名字以Chris开头的演员(按字母顺序)

SELECT nome_estrela
FROM ESTRELAS
WHERE nome_estrela LIKE 'Chris%'
ORDER BY nome_estrela ASC;

2. 列出这些演员的姓氏(按升序,去重)

SELECT DISTINCT split_part(nome_estrela, ' ', 2) AS sobrenome
FROM ESTRELAS
WHERE nome_estrela LIKE 'Chris%'
ORDER BY sobrenome ASC;

说明:假设姓名格式为「名 姓」,split_part(nome_estrela, ' ', 2)用于提取姓氏;使用DISTINCT避免重复姓氏出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:55:22