PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:BŁĄD:operator nie istnieje:liczba całkowita =znak zmienny

Myślę, że mówi ci dokładnie, co jest nie tak. Nie można porównać liczby całkowitej z varchar. PostgreSQL jest rygorystyczny i nie wykonuje za Ciebie żadnego magicznego rzutowania typów. Zgaduję, że SQLServer wykonuje rzutowanie typów automagicznie (co jest złe).

Jeśli chcesz porównać te dwie różne bestie, będziesz musiał rzucić je na siebie, używając składni rzucania :: .

Coś w tym stylu:

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

Zwróć uwagę na varchar rzutowanie typu na table1.col4.

Zauważ też, że rzutowanie typów może spowodować, że twój indeks w tej kolumnie stanie się bezużyteczny i spowoduje spadek wydajności, co jest dość złe. Jeszcze lepszym rozwiązaniem byłoby sprawdzenie, czy możesz na stałe zmienić jeden z dwóch typów kolumn, aby pasował do drugiego. Dosłownie zmień projekt bazy danych.

Możesz też utworzyć indeks dla rzutowanych wartości, używając niestandardowego, niezmiennego funkcja, która rzutuje wartości na kolumnę. Ale to też może okazać się nieoptymalne (ale lepsze niż casting na żywo).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nie można ponownie uruchomić Postgresa na Mac OS X

  2. Jak na tej podstawie mogę posłuchać tworzenia konkretnego modelu i stworzyć nowy (na innym stole)?

  3. Widoki PostgreSQL:odwoływanie się do jednego pola obliczeniowego w innym polu obliczeniowym

  4. foreach %dopar% + RPostgreSQL

  5. Jak korzystać z kontenera PostgreSQL z istniejącymi danymi?