Sql 用于更新多列重复项的查询

Sql 用于更新多列重复项的查询,sql,oracle11g,duplicates,constraints,Sql,Oracle11g,Duplicates,Constraints,我将在我的数据库上应用三列B_ACCT_UID、B_EXT_ID、B_CAMPAIGN_GUID唯一约束。”B_EXT_ID的“无”值不受影响。在这样做之前,我需要更新B_EXT_ID行以删除B_EXT_ID行或类似的内容 我知道如何找到它们: SELECT B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID, COUNT(*) FROM SB_BATCH WHERE B_EXT_ID != 'none' GROUP BY B_ACCT_UID, B_EXT_ID,

我将在我的数据库上应用三列B_ACCT_UID、B_EXT_ID、B_CAMPAIGN_GUID唯一约束。”B_EXT_ID的“无”值不受影响。在这样做之前,我需要更新B_EXT_ID行以删除B_EXT_ID行或类似的内容

我知道如何找到它们:

SELECT B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID, COUNT(*) 
FROM SB_BATCH 
WHERE B_EXT_ID != 'none' 
GROUP BY B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID 
HAVING COUNT(B_EXT_ID) > 1;
其中打印:

B_ACCT_UID B_EXT_ID                                                                                                                         B_CAMPAIGN_GUID                        COUNT(*)
---------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------ ----------
3000000010 sto                                                                                                                              setna                                         2 
3000000010 jeden                                                                                                                            pierwsza                                      2 
3000000010 dziewiec                                                                                                                         14F8CDEDACE0005C98727464800000000000          3
在尝试更新之前,我执行了select查询,该查询将被update替换

SELECT B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID 
FROM SB_BATCH 
WHERE B_EXT_ID IN (SELECT B_EXT_ID FROM SB_BATCH WHERE B_EXT_ID != 'none'
GROUP BY B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID 
HAVING COUNT(B_EXT_ID) > 1);
得到:

B_ACCT_UID B_EXT_ID                                                                                                                         B_CAMPAIGN_GUID                    
---------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------
3000000010 sto                                                                                                                              14F8CDEDACE0005C98727464800000000000 
3000000010 sto                                                                                                                              setna                                
3000000010 sto                                                                                                                              setna                                
3000000010 jeden                                                                                                                            pierwsza                             
3000000010 jeden                                                                                                                            pierwsza                             
3000000010 jeden                                                                                                                            14F8CDEDACE0005C98727464800000000000 
3000000010 dziewiec                                                                                                                         14F8CDEDACE0005C98727464800000000000 
3000000010 dziewiec                                                                                                                         14F8CDEDACE0005C98727464800000000000 
3000000010 dziewiec                                                                                                                         14F8CDEDACE0005C98727464800000000000 
这是一个半工作的例子,因为它还将更新非罪犯,如

B_ACCT_UID B_EXT_ID                                                                                                                         B_CAMPAIGN_GUID                    
---------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------
3000000010 sto                                                                                                                              14F8CDEDACE0005C98727464800000000000 

您能帮我修改查询吗?

一种方法是-

使用您的第一个查询,该查询为违规记录提供唯一的条目,并将它们放入临时表或为临时目的创建的表中

删除主表SB_批次中的所有违规记录

然后再次从临时表重新插入到表SB_批处理中。 注意-如果您的ID是唯一的,并且是使用增量/自定义逻辑生成的,则删除和重新插入可能不会保留它们


如果您的目标是删除/删除表中的重复项,则上述操作将起作用。但是我相信我误解了你的问题。

你使用的是哪种数据库管理系统?Oracle,Mysql?是Oracle,版本11。现在你想做什么?是否要删除重复项?或者更新其中一个重复的行?如果是,你想更新哪列?我在问题中已经说过:在这样做之前,我需要更新B_EXT_ID行以删除B_EXT_ID或类似的内容。