更新另一个表中包含重复行的表

时间:2015-07-30 10:59:41

标签: sql postgresql

我有三个表,一个名为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

的内容吗?

由于

1 个答案:

答案 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
                 );