Saya pikir itu memberitahu Anda apa yang salah. Anda tidak dapat membandingkan bilangan bulat dengan varchar. PostgreSQL ketat dan tidak melakukan typecasting ajaib untuk Anda. Saya menduga SQLServer melakukan typecasting secara otomatis (yang merupakan hal yang buruk).
Jika Anda ingin membandingkan dua binatang yang berbeda ini, Anda harus melemparkan satu ke yang lain menggunakan sintaks casting ::
.
Sesuatu seperti ini:
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 */
....;
Perhatikan varchar
typecasting pada table1.col4.
Perhatikan juga bahwa typecasting mungkin membuat indeks Anda pada kolom itu tidak dapat digunakan dan memiliki penalti kinerja, yang sangat buruk. Solusi yang lebih baik lagi adalah melihat apakah Anda dapat mengubah salah satu dari dua jenis kolom secara permanen agar sesuai dengan yang lain. Ubah desain basis data Anda.
Atau Anda dapat membuat indeks pada nilai yang dicor dengan menggunakan tidak dapat diubah . khusus fungsi yang memberikan nilai pada kolom. Tapi ini juga mungkin terbukti kurang optimal (tetapi lebih baik daripada casting langsung).