sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL:エラー:演算子が存在しません:整数=文字が変化します

    何が悪いのかを正確に伝えていると思います。整数を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つの列タイプの一方をもう一方の列タイプと一致するように永続的に変更できるかどうかを確認することです。データベースの設計を文字通り変更します。

    または、カスタムの不変を使用して、キャストされた値にインデックスを作成することもできます。 列に値をキャストする関数。しかし、これも最適ではないことが判明する可能性があります(ただし、ライブキャスティングよりも優れています)。




    1. PythonMySQLDBIN句で使用するためのリストの実装

    2. SQLiteのFIND_IN_SETの代わりに?

    3. EBS 12.2.5以降:ログインページボタンのずれ

    4. SQLは、日付フィールドを使用して会計四半期および会計年度ごとにグループ化する方法