创建含JOIN的PostgreSQL视图失败,请求排查问题原因
你的视图创建失败的原因及修复方案
嘿,我一眼就看到你代码里的问题啦——你在SELECT后面把列用括号包起来了,这在PostgreSQL里会搞出小麻烦!
问题出在哪?
当你写select (real_property.seller_id, house_id, cost, floor, square, surname, name, phone_number)的时候,PostgreSQL会把这些列打包成一个单一的复合行类型,而不是返回你期望的多个独立列。这就导致视图里只有一个“打包”后的列,完全不符合你想要关联两张表字段的需求,甚至可能因为这种不规范的写法引发语法报错。
修复后的代码
把SELECT后面的括号去掉,直接列出需要的字段就行啦。另外,因为seller_id在两张表里都存在,最好明确指定来源(避免歧义),修正后的代码如下:
CREATE VIEW real_property_and_seller_view AS SELECT real_property.seller_id, house_id, cost, floor, square, surname, name, phone_number FROM real_property LEFT JOIN seller ON real_property.seller_id = seller.seller_id;
额外小建议
如果后续使用视图时担心字段名混淆,还可以给重复的字段加别名,让视图结构更清晰:
CREATE VIEW real_property_and_seller_view AS SELECT real_property.seller_id AS property_seller_id, house_id, cost, floor, square, seller.surname AS seller_surname, seller.name AS seller_name, phone_number FROM real_property LEFT JOIN seller ON real_property.seller_id = seller.seller_id;
内容的提问来源于stack exchange,提问作者YoungStudent
相关产品推荐
相关产品推荐

