【问题标题】:Delete duplicate rows based on json value根据json值删除重复行
【发布时间】:2018-07-15 12:43:39
【问题描述】:

我有一个包含两列的表:idcontent

content 是一个 json 字段。

我需要删除 jsons 中属性的重复项。

这是我拥有的 json 示例:

{
    "num_aire_ospf": "",
    "name": "name1",
    "rpv": "119"    
}

这是我需要删除的重复项目的示例:

ID    | Content  
--------------------------------------------------------------------------
 1    | {"num_aire_ospf": "", "name": "name1", "rpv": "119" }
 2    | {"num_aire_ospf": "", "name": "name1", "rpv": "119" }
 3    | {"num_aire_ospf": "", "name": "name1", "rpv": "119" }
 4    | {"num_aire_ospf": "", "name": "name1", "rpv": "120" }
 5    | {"num_aire_ospf": "", "name": "name8", "rpv": "150" }
 6    | {"num_aire_ospf": "", "name": "name8", "rpv": "150" }
 7    | {"num_aire_ospf": "", "name": "name8", "rpv": "151" }

我想删除第一行同名的行。

在这个例子中,我想做一个查询来删除第 1,2,3,5,6 行并且只保留这些行:

ID    | Content  
--------------------------------------------------------------------------    
 4    | {"num_aire_ospf": "", "name": "name1", "rpv": "120" }    
 7    | {"num_aire_ospf": "", "name": "name8", "rpv": "151" }

所以只保留最后一行同名。

所以对于“name1”,我需要删除以“name1”为名称的前 3 行。 而对于“name8”,我需要删除以“name”8 作为名称的前 2 行。

它必须是动态的,因为我有很多同名的行,我想保留最后一行。

【问题讨论】:

    标签: sql json postgresql duplicates


    【解决方案1】:

    关系数据库的表中没有“最后一行”(或“第一行”)这样的东西。从你的例子中我猜想“最后一行”,你的意思是最高的id,那么你可以使用这个:

    delete from data
    where id not in (select max(id)
                     from data 
                     group by content ->> 'name')
    

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多