【发布时间】:2012-09-18 00:18:29
【问题描述】:
我的本地 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,但不确定如何执行此操作。提前致谢!
编辑:
假设我有一个具有以下值的 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 语句中。
【问题讨论】:
-
标识符周围的[]是什么意思?
-
没什么,只是为了视觉吸引力;帮助我更轻松地查看“段”(模式、表格、字段);我猜我是从我的 MS SQL 时代借来的
-
你的意图不明确。您想更新“动物”,将其属性之一更改为(指向)新值吗?另外:实际的表定义会有所帮助。
-
“一些新值”来自任何表或静态表..?
-
抱歉造成混淆 - 在运行时我会知道我想更新其对应的 animal_attrib_value 的动物。请注意,在
animals表上,我有一个指向animal_attrib_values的外键。这个外键不应该改变,只有对应的animal_attrib_value_name。
标签: sql postgresql sql-update inner-join rdbms