我有三个表,一个名为facility
,一个hotel
,另一个hotel_facility
是酒店和设施的联接表。到现在为止还挺好。我在facility
表中有很多重复项。我想更新连接表,然后删除facility
表中的重复项。查找重复项并删除它们不是问题:
select o.id
from facility o
where exists ( select 'x' from facility i where i.name = o.name);
然后我根据此查询删除。但是如何更新连接表我将如何进行此操作,我使用的是最新版本的Postgres。我可以使用类似Update table using newest value in another table
的内容吗?由于
答案 0 :(得分:1)
我认为您需要在执行删除之前执行更新。此查询将设施ID设置为该名称的最低设施ID:
update hotel_facility hf
set facility_id = (select min(f.facility_id)
from facility f join
facility f2
on f.name = f2.name
where f.id = hf.facility_id);
然后你可以删除除最小值之外的所有内容:
delete from facility f
where exists (select 1
from facility f2
where f2.name = f.name and f2.id > f.id
);