今天早上我问了这个非常相似的问题,得到了很好的回答。
但是,看完剧本后,我发现我的实际问题比我在那个问题中描述的要复杂一些。基本上,我有 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
记录:
[myschema].[animals]
--------------------
animal_id = 458
animal_attrib_type_id = 38
animal_attrib_value_id = 23
并且对应的animal_attrib_type
(id = 38)具有以下值:
[myschema].[animal_attrib_types]
--------------------------------
animal_attrib_type_id = 38
animal_attrib_type_name = 'animals.should-make-noise'
并且对应的animal_attrib_value
(id = 23)具有以下值:
[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_type_id = 23
animal_attrib_type_name = 'true'
因此,同animal
一条记录可以有多个类型/值对。在这种情况下,动物有一个对应于一个animal_attrib_type_name
“ ”的“ ”。animals.should-make-noise
animal_attrib_value_name
true
在运行时,我将只有animal_id
(ie, 458) 和animal_attrib_type_id
(ie, 38)。我需要能够查找animal_attrib_value_name
与给定animal_id
且animal_attrib_type_id
仅对应的适当值,然后将其值更新为一些静态文本(“真”或“假”);全部来自同一个 UPDATE 语句。
上面提到的问题中的答案对于我所说的问题是正确的,但是由于同一个动物有 0+ 类型/值组合,我实际上需要一个稍微不同的 SQL 语句。提前致谢!