何が悪いのかを正確に伝えていると思います。整数をvarcharと比較することはできません。 PostgreSQLは厳密であり、魔法の型キャストは行いません。 SQLServerは自動的に型キャストを行うと思います(これは悪いことです)。
これらの2つの異なる獣を比較する場合は、キャスト構文::
を使用して一方を他方にキャストする必要があります。 。
これらの線に沿った何か:
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
に注目してください table1.col4での型キャスト。
また、型キャストにより、その列のインデックスが使用できなくなり、パフォーマンスが低下する可能性があることにも注意してください。これはかなり悪いことです。さらに良い解決策は、2つの列タイプの一方をもう一方の列タイプと一致するように永続的に変更できるかどうかを確認することです。データベースの設計を文字通り変更します。
または、カスタムの不変を使用して、キャストされた値にインデックスを作成することもできます。 列に値をキャストする関数。しかし、これも最適ではないことが判明する可能性があります(ただし、ライブキャスティングよりも優れています)。