PostgreSQL关联两个表更新table1价格时报列不存在错误如何解决
错误原因
PostgreSQL对标识符(列名、表名等)的解析规则是:如果不使用双引号包裹,会自动将所有标识符转为小写,同时将空格、括号等特殊符号识别为语法分隔符而非标识符的一部分。
你代码中的列名Name (IS)包含空格和括号,直接写table2.Name (IS)时,PostgreSQL会将其解析为调用table2.name列作为函数、传入IS参数的逻辑,自然找不到匹配的列,就会抛出Column does not exist error错误。
解决方法
对包含特殊字符、大小写混合的标识符,必须用双引号包裹,强制PostgreSQL按照原始字符完整匹配标识符,修正后的SQL如下:
UPDATE table1 SET "Price" = table2."Price" FROM table2 WHERE table2."Name (IS)" = table1."Name (IS)";
注意如果你的Price列建表时也是用混合大小写定义的,同样需要用双引号包裹,避免PostgreSQL自动转小写后匹配不到列。后续所有涉及Name (IS)这类特殊列名的操作,都需要用双引号包裹完整列名。
内容的提问来源于stack exchange,提问作者daniel stafford
相关产品推荐
相关产品推荐

