我有一个数据库,我需要根据另一个表的注册表更新某些表上的数据。我可以得到帮助,因为我有点坚持它。
我将此选择查询作为参考:
select i.*
from transaction as 't'
inner join transaction_detail as 'td'
on t.id_transaction=td.id_transaction
inner join inventory as 'i'
on i.id_inventory=td.id_inventory
where t.registered_date>='2016-09-01';
我想要做的是根据表t中的日期从表i中更新一个字段,所以它会是这样的:
update inventory i
set i.status='cancel'
from transaction_detail td
inner join transaction t
on t.id_transaction=td.id_transaction
where t.registered_date>='2016-09-01'
and i.id_inventory=td.id_inventory;
我在postgres上做这个,有什么指针吗?我应该尝试使用函数吗?
编辑:如果它有帮助,列之间的关系是从事务到transaction_detail的一对多,以及从transaction_detail到库存的一对一。
答案 0 :(得分:2)
请参阅https://www.postgresql.org/docs/9.3/static/sql-update.html
column_name table_name指定的表中列的名称。如果需要,可以使用子字段名称或数组下标限定列名称。不要在目标列的规范中包含表的名称 - 例如,UPDATE选项卡SET tab.col = 1无效。
因此您需要将set i.status='cancel'
更改为set status='cancel'