Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:使用id从表中删除行_Sql_Postgresql_Duplicates_Primary Key - Fatal编程技术网

PostgreSQL:使用id从表中删除行

PostgreSQL:使用id从表中删除行,sql,postgresql,duplicates,primary-key,Sql,Postgresql,Duplicates,Primary Key,我有一个id为pk的bill表和一个billno列,我应该从中删除重复项 共62924行 从帐单中选择countbillno 独特的billno 59704,因此需要删除3220行 从票据中选择countdistinct billno 查询以获取副本3220 但是,当我按id删除重复项时,总数不符:- 删除重复行后的计数61385=>此处应为59704 我能知道为什么会发生这种情况吗?您似乎正在删除所有重复的行。如果希望结果集不重复,请在以下位置使用distinct: 这将返回每个具有最高id的

我有一个id为pk的bill表和一个billno列,我应该从中删除重复项

共62924行

从帐单中选择countbillno

独特的billno 59704,因此需要删除3220行

从票据中选择countdistinct billno

查询以获取副本3220

但是,当我按id删除重复项时,总数不符:-

删除重复行后的计数61385=>此处应为59704

我能知道为什么会发生这种情况吗?

您似乎正在删除所有重复的行。如果希望结果集不重复,请在以下位置使用distinct:

这将返回每个具有最高id的票据的行


我不知道为什么你的查询会过滤掉这家公司。这个问题没有提到过滤。

我注意到复制品的公司代码“1”和“9”不同,因此我选择保留更高的公司代码。如果我在你的查询中使用这个逻辑,我必须按billno订购,公司代码描述,对吗?@Pavitran。是的,您将在订单中包含公司代码。
select count(*) from bill
    WHERE bill.billno IN (SELECT billno
                   FROM bill
                   GROUP BY billno HAVING COUNT(*) > 1)
    AND bill.company_code like '1'
select count (*) from bill
where bill.id not in
(
select id from bill
    WHERE bill.billno IN (SELECT billno
                   FROM bill
                   GROUP BY billno HAVING COUNT(*) > 1)
    AND bill.company_code like '1'
)
select distinct on (billno) b.*
from bill b
order by billno, id desc;