PHP操作PostgreSQL:依据列值移除重复行问题
解决PostgreSQL表重复行保留指定ID的问题
你之前用的SELECT DISTINCT和SELECT DISTINCT ON只是查询去重后的结果,并不会修改数据表本身——这就是为什么执行后表内容没变化的原因哦。要实现删除重复行,仅保留ID为4的那一行,你需要用DELETE语句来实际修改数据。
步骤1:先确认要删除的重复行
先运行这条查询,看看哪些行是和ID=4的行在gene_id、searchterm、types上重复的其他行,避免误删:
SELECT * FROM searchterms WHERE (gene_id, searchterm, types) IN ( SELECT gene_id, searchterm, types FROM searchterms WHERE id = 4 ) AND id != 4;
步骤2:执行删除操作
确认结果正确后,运行这条删除语句,移除所有重复且ID不等于4的行:
DELETE FROM searchterms WHERE (gene_id, searchterm, types) IN ( SELECT gene_id, searchterm, types FROM searchterms WHERE id = 4 ) AND id != 4;
补充通用写法(针对多重复组场景)
如果需要处理所有重复组(即所有相同gene_id、searchterm、types的行组),且每个组只保留ID=4的行(若该组存在ID=4的记录),可以用这个更灵活的写法:
DELETE FROM searchterms st WHERE st.id != 4 AND EXISTS ( SELECT 1 FROM searchterms st2 WHERE st2.gene_id = st.gene_id AND st2.searchterm = st.searchterm AND st2.types = st.types AND st2.id = 4 );
把上面的SQL替换到你的PHP代码中执行,就能实现你想要的效果啦。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

