如何从SQL嵌套查询中选取列?查询报缺少FROM子句条目错误怎么办
问题解决方法
错误原因
- 外层查询的作用域仅能访问内层子查询返回的结果集,子查询内部的表别名
ml、原表名machineslocation_loc对外层不可见,因此你在外层写ml.createddate、machineslocation_loc.createddate都会触发缺失表条目的报错。 - 内层子查询使用
SELECT *查询多表关联结果时,多个表的同名字段createddate会产生重名冲突,数据库无法自动区分归属,也会导致外层取值失败。
修复方案
在内层子查询中显式指定需要返回的字段,给machineslocation_loc表的createddate字段设置专属别名,外层直接通过该别名取值即可。同时建议将过滤条件从JOIN的ON子句移到WHERE子句,提升可读性。
修复后代码
SELECT x, ml_createddate, count_ FROM (SELECT ml.x, ml.createddate AS ml_createddate, count(*) OVER (PARTITION BY ml.x) AS count_ FROM machineslocation_loc AS ml JOIN m AS ma ON ma.mid = ml.mid JOIN sh AS sh ON sh.shid = ma.shid JOIN ph AS ph ON ph.phid = sh.phid JOIN ar AS ar ON ar.arid = ph.arid JOIN pn AS pa ON pa.pnid = ar.pnid WHERE ml.x LIKE '%705N%' ) tableWithCount
注意事项
- 多表关联的子查询场景不要使用
SELECT *返回全量字段,需显式指定要返回的字段,避免同名字段冲突。 - 所有查询字段建议加上所属表的别名前缀,避免数据库无法识别字段归属。
内容的提问来源于stack exchange,提问作者Puzzlemaster
相关产品推荐
相关产品推荐

