Обновление Postgres с внутренним соединением через 2 таблицы?

у меня есть 3 таблицы в моей локальной базе данных Postgres:

[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) и изменить его animal_attrib_value_name to 'Some new value', все внутри одного оператора.

2 ответов


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
  ;

вы спрашиваете что-то вроде этого права..?

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)

попробуйте это..