programing

PostgreSQL: ERROR: 연산자가 존재하지 않습니다. 정수 = 문자가 다양합니다.

newstyles 2023. 5. 24. 21:46

PostgreSQL: ERROR: 연산자가 존재하지 않습니다. 정수 = 문자가 다양합니다.

아래 예시와 같이 보기를 작성하려고 합니다.

예:

 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에서 실행되었지만 postgre에서 위의 오류가 발생했습니다.SQL.

저는 그것이 정확히 무엇이 잘못된 것인지를 당신에게 말해주고 있다고 생각합니다.정수를 막대 문자와 비교할 수 없습니다.포스트그레SQL은 엄격하고 마법 타입캐스팅을 하지 않습니다.SQL Server가 자동으로 타이프캐스팅을 하는 것 같습니다(나쁜 일입니다).

이 두 짐승을 비교하려면 주조 구문을 사용하여 하나를 다른 짐승에게 주조해야 합니다.::.

다음과 같은 것들이 있습니다.

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 */
....;

주의:varchar표 1.col4에 있는 typecasting.

또한 타이프캐스팅은 해당 열의 인덱스를 사용할 수 없게 만들고 성능 저하를 초래할 수 있습니다.두 열 유형 중 하나를 다른 열 유형과 일치하도록 영구적으로 변경할 수 있는지 확인하는 것이 훨씬 더 좋은 해결책입니다.데이터베이스 설계를 문자 그대로 변경합니다.

또는 열에 값을 캐스팅하는 사용자 지정 불변 함수를 사용하여 캐스팅된 값에 대한 인덱스를 생성할 수 있습니다.그러나 이 역시 차선책임이 입증될 수 있습니다(그러나 라이브 캐스팅보다는 낫습니다).

언급URL : https://stackoverflow.com/questions/23622993/postgresql-error-operator-does-not-exist-integer-character-varying