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

无法从含复合类型的数据库表取数据:缺失FROM子句表项错误

解决PostgreSQL复合类型查询报错:ERROR: missing FROM-clause entry for table

错误原因

你在查询里把复合类型列nails_design误当成了表名来引用,PostgreSQL找不到名为nails_design的表,因此抛出该错误。nails_design是photos表中的一个列,类型为你定义的design复合类型,必须用正确语法访问其内部属性。

正确查询写法

以下两种方式都能实现需求:

方式1:用括号包裹列名访问属性

SELECT * 
FROM photos
WHERE (nails_design).top = 'matte';

这种写法明确告知PostgreSQL,nails_design是当前表的列,我们要访问它的top属性。

方式2:使用操作符访问(兼容复合类型)

SELECT * 
FROM photos
WHERE nails_design ->> 'top' = 'matte';

->>操作符会把复合类型的属性值转为字符串,直接和枚举的字符串形式匹配。如果需要严格匹配枚举类型,也可以用->获取原始类型后强转:

SELECT * 
FROM photos
WHERE (nails_design -> 'top')::tops = 'matte';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:05:25