对整个重复行进行计数的SQL查询

对整个重复行进行计数的SQL查询,sql,oracle,duplicates,Sql,Oracle,Duplicates,我正在寻求有关查询的帮助,以执行以下操作: 在插入一行之前,查找两个表中有多少行具有与正在插入的行相同的信息。 所以基本上我想看看这一行是否是完全重复的。 我想基于所有列,而不仅仅是PK,因为如果有一列不同,那么这是一个有效的插入 这是我所需要的东西,尽管不正确: SELECT COUNT(*) FROM ORDER_TRF_HEADER WHERE ((SELECT * FROM ORDER_TRF_HEADER_COMPLETE WHERE MA_PONUM = '29608207') =

我正在寻求有关查询的帮助,以执行以下操作:

在插入一行之前,查找两个表中有多少行具有与正在插入的行相同的信息。 所以基本上我想看看这一行是否是完全重复的。 我想基于所有列,而不仅仅是PK,因为如果有一列不同,那么这是一个有效的插入

这是我所需要的东西,尽管不正确:

SELECT COUNT(*)
FROM ORDER_TRF_HEADER
WHERE
((SELECT * FROM ORDER_TRF_HEADER_COMPLETE WHERE MA_PONUM = '29608207') = (SELECT * FROM ORDER_TRF_HEADER WHERE MA_PONUM = '29608207'));
表-ORDER\U TRF\U头

MA_CUST VARCHAR2(8字节)
MA_PONUM VARCHAR2(30字节)
MA_ODATE VARCHAR2(8字节)
MA_项目编号(3,0)
MA_SALEM VARCHAR2(2字节)
硕士学位日数(3,0)
MA_CURR VARCHAR2(3字节)

表-订单\u TRF\u标题\u完成

MA_CUST VARCHAR2(8字节)
MA_PONUM VARCHAR2(30字节)
MA_ODATE VARCHAR2(8字节)
MA_项目编号(3,0)
MA_SALEM VARCHAR2(2字节)
硕士学位日数(3,0)
MA_CURR VARCHAR2(3字节)

谢谢

我想基于所有列,而不仅仅是PK,因为如果有一列不同,那么这是一个有效的插入

那么您的问题是您没有正确定义主键


当然,不维护由记录中的每个属性组成的主键是有充分理由的,但是,比在插入之前以如此笨拙的方式检查重复项更好的解决方案是将数据的一部分作为唯一键来维护。

您可以尝试
INTERSECT

SELECT COUNT(*)
FROM   (SELECT *
        FROM   order_trf_header_complete
        WHERE  ma_ponum = '29608207'
        INTERSECT
        SELECT *
        FROM   order_trf_header
        WHERE  ma_ponum = '29608207') ;

注意::最好显式使用所有列名,而不是选择
*

示例数据和所需结果。对我来说,这听起来是一种不好的方法,但请考虑在“所有列减去主键”上声明唯一约束。