如何使用SQL WITH VALUES子句定义常量?PostgreSQL语法报错求助
解决PostgreSQL中WITH VALUES子句的错误问题
你的错误原因很直接:ParameterType是你定义的公共表表达式(CTE),本质是一张临时表,不能直接把它当作单个值和列做等值比较,PostgreSQL会把它当成列名查找,自然找不到对应列。
下面是两种可行的修正写法:
写法1:子查询引用CTE的单个值
给VALUES的结果列指定名称,再通过子查询取出这个值做比较:
WITH ParameterType AS ( VALUES ('TEMPERATURE'::text) AS t(target_param) ) SELECT * FROM weather_data WHERE parameter_type = (SELECT target_param FROM ParameterType);
如果你的parameter_type是varchar等特定类型,建议显式指定类型(比如'TEMPERATURE'::varchar(50)),避免隐式类型转换可能带来的问题。
写法2:JOIN关联(适合多值场景)
如果以后需要查询多个参数类型,用JOIN的方式更灵活:
WITH ParameterType AS ( VALUES ('TEMPERATURE'::text) AS t(target_param) ) SELECT w.* FROM weather_data w INNER JOIN ParameterType p ON w.parameter_type = p.target_param;
内容的提问来源于stack exchange,提问作者meolic
相关产品推荐
相关产品推荐

