SQL语句只删除重复的一行

时间:2017-06-30 19:33:11

标签: ruby postgresql duplicates

所以我在Ruby工作,并说我在两列完全相同的表中有6行。在我的情况下,我的表“campaign_items”有两列“campaign_name”和“item”。我想使用单个查询从6个重复项中只删除一行。我从这开始:

db.exec("DELETE FROM products WHERE campaign_name = '#{camp_name}' AND product_type = 'fleecejacket' AND size = '#{size_array[index]}'")

当然删除了该条件的所有项目。所以我在另一个问题中找到了这样的答案:

db.exec("DELETE FROM products a WHERE a.ctid <> (SELECT min(b.ctid) FROM products b WHERE a.key = b.key)")

但是,这会删除除一个之外的所有重复项。我还没有找到一种只删除具有重复项的SINGLE行的方法。是否有我要查找的删除顶部查询?提前谢谢。

编辑:我还有一个“id”列,这是一个主键。

1 个答案:

答案 0 :(得分:0)

所以我绝对推翻了这一点,但所需要的只是:

x = db.exec("SELECT * FROM campaign_items WHERE campaign_name = '#{camp_name}' AND item = 'fleecejacket'")

id = x[0]['id']

db.exec("DELETE FROM campaign_items WHERE campaign_name = '#{camp_name}' AND item = 'fleecejacket' AND id = '#{id}'")

从第一个副本中获取唯一ID(因为删除哪一个并不重要)并删除具有该ID的行。