在这里,我试图创建视图,如下例所示:

例子:

 create view view1
 as 
 select table1.col1,table2.col1,table3.col3
 from table1 
 inner join
 table2 
 inner join 
 table3
 on 
 table1.col4 = table2.col5 
 /* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
 /* ERROR: operator does not exist: integer = character varying */
 ....;

注意:在sql server中执行相同的查询,但在postgreSQL中得到上述错误.

推荐答案

我认为这是在告诉你到底出了什么问题.不能将整数与varchar进行比较.PostgreSQL非常严格,不会为您进行任何神奇的类型转换.我猜SQLServer是自动进行类型转换的(这是一件坏事).

如果你想比较这两种不同的野兽,你必须使用铸造语法::铸造一个到另一个.

大致如下:

create view view1
as 
select table1.col1,table2.col1,table3.col3
from table1 
inner join
table2 
inner join 
table3
on 
table1.col4::varchar = table2.col5
/* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
/* ERROR: operator does not exist: integer = character varying */
....;

请注意表1上的varchar个排字.可乐4.

还请注意,类型转换可能会导致该列上的索引不可用,并导致性能下降,这是非常糟糕的.更好的解决方案是查看是否可以永久更改两个列类型中的一个,以匹配另一个.有文化地改变你的数据库设计.

也可以使用自定义的immutable函数在列上强制转换值,从而在强制转换的值上创建索引.但这也可能被证明是次优的(但比实况转播更好).

Postgresql相关问答推荐

Postgr不列出运算符和函数

多克.波斯格雷斯.PgAdmin4

是否从表中 Select 值?巴什

如何返回old_ids和重复行的映射';来自PostgreSQL函数的s new_id

正在加载 pgAdmin 4 v7.4...同时打开 pgAdmin

我想优化查询SQL

联合所有 postgresql Select 子句保留顺序

是否可以在 postgresql 中添加表元数据?

转换数组类型

Select 日期最高的行

Postgresql - 在 Big Data 库中使用数组的性能

H2 postgresql mode模式似乎不起作用

Postgresql:在插入列时(或之前)自动小写文本

如何将参数值添加到 pgadmin sql 查询?

使用 pg_dump 和 psql -U postgres db_name < ... 移动数据库会导致ERROR: relation "table_name" does not exist

按任意时间间隔计算行数的最佳方法

错误:关系列不存在 PostgreSQL,无法运行插入查询

实时监控 PostgreSQL 查询的应用程序?

Ecto Postgres 安装错误密码验证失败

postgresql DB中唯一键的正确数据类型是什么?