我在本地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)。我需要在单个UPDATE语句中查找相应的animal_attrib_value
(23)并将其animal_attrib_value_name
更改为'Some new value'
。
答案 0 :(得分:27)
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
;
答案 1 :(得分: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)
试试这个..