2012-09-26 36 views
9

我在本地的Postgres数据库3个表:Postgres通过2个表的内连接更新?

[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??? 

我可能需要做某种嵌套SELECTINNER JOINWHERE子句中,但不知道如何做到这一点。提前致谢!

编辑

比方说,我有一个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更改为'Some new value',这些都在单个UPDATE语句中。

+0

什么的[]周围的标识是什么意思? – wildplasser

+0

没什么,只是在那里为视觉上诉;帮助我更容易地看到“细分”(模式,表格,字段);猜我从我的MS SQL日子借了它 – IAmYourFaja

+0

你的意图不明确。你想更新一个“动物”,改变它的一个属性(指向)一个新的价值?另外:实际的表格定义会有所帮助。 – wildplasser

回答

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 
    ; 
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) 

试试这个..

+0

谢谢(+1) - 请参阅我编辑中的示例。你能确认你的代码在我的例子中完成了我正在寻找的东西吗?再次感谢! – IAmYourFaja