我的本地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???
我可能必须在WHERE子句中做一些嵌套的SELECT或INNER JOIN,但不知道该怎么做.提前致谢!
编辑:
假设我有一个具有以下值的动物记录:
[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更改为“一些新值”,这些都在单个UPDATE语句的内部.
解决方法
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 ;