9

ローカル 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. このアイテムに関連付けられているを更新するには、SQL を実行する必要があるanimal_attribute_value_nameため、次のようになります。

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

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

編集

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) を検索し、そのすべてを単一の UPDATE ステートメント内で に変更animal_attrib_value_nameする'Some new value'必要があります。

4

2 に答える 2

26
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
  ;
于 2012-09-26T11:58:59.173 に答える
4

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

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)

これを試して..

于 2012-09-26T11:51:59.923 に答える