SQL语法错误:')'附近存在语法问题,请求排查代码错误原因
排查你的SQL语法错误
嘿,我一眼就揪出问题啦——你的SQL报')'附近语法错误,核心原因是派生表没有指定别名!SQL的语法规则明确要求:所有作为子查询的派生表(就是你用括号包起来的那个聚合查询块)必须要有一个别名,数据库才能识别它,不然就会在右括号位置抛出语法错误。
咱们拆解下你的代码问题点:
- 你在
IN子句里嵌套了一层子查询,其中的(select t.title_id, sum(s.qty) from titles t inner join sales s on t.title_id = s.title_id group by t.title_id having sum(s.qty) > 20)是一个派生表,但你没给它起别名,这直接违反了语法要求。
修正后的代码(两种可选写法)
第一种是在原代码基础上给派生表加别名,保留原有字段结构:
select t.title, pub.pub_name from titles t inner join publishers pub on t.title_id = pub.pub_id where t.title_id in ( select title_id from ( select t.title_id, sum(s.qty) from titles t inner join sales s on t.title_id = s.title_id group by t.title_id having sum(s.qty) > 20 ) as sales_summary -- 这里补上派生表的别名 )
第二种是更简洁的优化写法:因为IN子句只需要title_id来匹配,所以没必要嵌套两层子查询,直接把聚合查询放在IN里就行,既高效又避免语法问题:
select t.title, pub.pub_name from titles t inner join publishers pub on t.title_id = pub.pub_id where t.title_id in ( select t.title_id from titles t inner join sales s on t.title_id = s.title_id group by t.title_id having sum(s.qty) > 20 )
内容的提问来源于stack exchange,提问作者Mr.Gogo
相关产品推荐
相关产品推荐

