web-dev-qa-db-ja.com

2つのテーブルにまたがる内部結合によるPostgresの更新?

ローカルのPostgresデータベースに3つのテーブルがあります。

[myschema].[animals]
--------------------
animal_id
animal_attrib_type_id (foreign key to [myschema].[animal_attrib_types])
animal_attrib_value_id (foreign key to [myschema].[animal_attrib_values])

[myschema].[animal_attrib_types]
--------------------------------
animal_attrib_type_id
animal_attrib_type_name

[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_value_id
animal_attrib_value_name

実行時にanimal_idがわかります。このアイテムに関連付けられているanimal_attribute_value_nameを更新するには、SQLを実行する必要があるため、次のようになります。

UPDATE
    animal_attribute_values aav
SET
    aav.animal_attribute_value_name = 'Some new value'
WHERE
    # Somehow join from the provided animal_id???

SELECT句内で何らかのネストされたWHEREまたはINNER JOINを実行する必要があるかもしれませんが、これを行う方法がわかりません。前もって感謝します!

編集

次の値を持つanimalレコードがあるとします。

[myschema].[animals]
--------------------
animal_id = 458
animal_attrib_type_id = 38
animal_attrib_value_id = 23

また、対応するanimal_attrib_value(id = 23)の値は次のとおりです。

[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_value_id = 23
animal_attrib_value_name = 'I am some value that needs to be changed.'

実行時には、animal_id(458)しかありません。対応するanimal_attrib_value(23)を検索し、そのanimal_attrib_value_name'Some new value'に変更する必要があります。これらはすべて、単一のUPDATEステートメント内にあります。

9
IAmYourFaja
UPDATE
    animal_attribute_values aav
SET
    animal_attribute_value_name = 'Some new value'
FROM animals aa
WHERE aa.animal_id = 458
AND aa.animal_attrib_value_id = aav.animal_attrib_value_id
  ;
27
wildplasser

あなたはこの権利のような何かを求めていますか..?

update  animal_attribute_values aav
set  aav.animal_attribute_value_name = 'Some new value'
where aav.animal_attrib_value_id in (
select a.animal_attrib_value_id where a.animal_id=458)

これを試して..

4
solaimuruganv