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
'programing' 카테고리의 다른 글
Express에서 "?" 다음에 GET 매개 변수에 액세스하는 방법은 무엇입니까? (0) | 2023.05.24 |
---|---|
C#을 사용하여 .NET에서 현재 사용자 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.05.24 |
잘못된 작업예외:어셈블리에서 'UserSecretsIdAttribute'를 찾을 수 없습니다. (0) | 2023.05.24 |
산란 과정의 자식이 되지 않고 새로운 과정을 시작합니다. (0) | 2023.05.24 |
nodejs 스크립트 내의 mongo 데이터베이스에 있는 모든 컬렉션 나열 (0) | 2023.05.24 |