SQL Statement to delete only one row out of duplicates

假装没事ソ 提交于 2019-12-08 13:34:30

问题


So I am working in Ruby, and say I have 6 rows in a table of two columns that are exactly identical. In my case, my table "campaign_items" has two columns "campaign_name" and "item." I would like to delete only one row out of the 6 duplicates using a single query. I started with this:

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

Which of course deleted all items of that condition. So I found in another question an answer along these lines:

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

However, this would delete all duplicates except for one. I have not found a way that only deletes a SINGLE row that has duplicates. Is there a delete top query that I am looking for? Thanks in advance.

Edit: I also have a column "id" which is a primary key.


回答1:


So I definitely overthought this, but all that is needed is this:

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}'")

Get the unique id from the first duplicate (since it doesn't matter which one is deleted) and delete the row with that id.



来源:https://stackoverflow.com/questions/44853698/sql-statement-to-delete-only-one-row-out-of-duplicates

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!