2012-09-26 35 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