web-dev-qa-db-ja.com

リレーション{table_name}の列{table_name}は存在しませんSQL状態:42703

テーブル名と列名を指定して更新クエリを実行すると、エラーが発生します。

UPDATE Temp SET Temp.Id='234',Temp.Name='Test'WHERE Id='245'

これはエラーです:

ERROR:  column "temp" of relation "temp" does not exist
LINE 1:      UPDATE Temp SET Temp.Id='23...
                               ^
********** Error **********

ERROR: column "temp" of relation "temp" does not exist
SQL state: 42703
Character: 24
4
user79097

SETUPDATE句でテーブルエイリアス(またはtablename修飾列名)を使用することはできません(使用する必要もありません)。これは、1つのUPDATE内の1つのテーブルしか更新できないため、そこにも列名のあいまいさが存在しないため、理にかなっています。

幸いにも、これまでに役立つドキュメント 明示的に言及 あなたのケース:

column_name

table_nameで指定されたテーブル内の列の名前。列名は、必要に応じてサブフィールド名または配列添え字で修飾できます。ターゲット列の指定にテーブルの名前を含めないでください。たとえば、UPDATE tab SET tab.col = 1は無効です。

したがって、解決策はSET句からtemp.を単に削除することです。

UPDATE temp SET id = '234', name = 'Test' WHERE id = '245'

注:

  • 本当に数値をテキストとして保存していますか?はいの場合、なぜですか?通常は災害のレシピです。たとえば、id列に'mkjcvnd7y78r3tgbhvcjh'などを入力しないようにするにはどうすればよいですか?
  • 大文字で始まるオブジェクト名の使用方法は混乱を招きます。名前を二重引用符で囲まないと、実際のテーブルはtempではなくTempと呼ばれます。後者の方法で使用すると、可読性が低下する場合があります(もちろん、好みや習慣によって異なります)。
9
dezso