sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:FEL:operatorn finns inte:heltal =teckenvarierande

Jag tror att det säger dig exakt vad som är fel. Du kan inte jämföra ett heltal med en varchar. PostgreSQL är strikt och gör ingen magisk typcasting åt dig. Jag antar att SQLServer gör typcasting automagiskt (vilket är dåligt).

Om du vill jämföra dessa två olika bestar måste du casta den ena till den andra med hjälp av castingsyntaxen :: .

Något i den här stilen:

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

Lägg märke till varchar typcasting på table1.col4.

Observera också att typcasting möjligen kan göra ditt index på den kolumnen oanvändbart och har en prestationsstraff, vilket är ganska dåligt. En ännu bättre lösning skulle vara att se om du permanent kan ändra en av de två kolumntyperna för att matcha den andra. Ändra din databasdesign bokstavligen.

Eller så kan du skapa ett index på de kastade värdena genom att använda en anpassad, oföränderlig funktion som kastar värdena på kolumnen. Men även detta kan visa sig vara suboptimalt (men bättre än livecasting).




  1. PostgreSQL:Sex inte så lätta stycken

  2. Hur man skapar VARRAYs som PL/SQL-blockmedlem i Oracle Database

  3. Kan inte logga in på systemanvändaren postgres

  4. SQL-sats för att sammanfoga och ge resultat i flera kolumner