Обновление 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)
попробуйте это..