Sql 用于更新多列重复项的查询
我将在我的数据库上应用三列B_ACCT_UID、B_EXT_ID、B_CAMPAIGN_GUID唯一约束。”B_EXT_ID的“无”值不受影响。在这样做之前,我需要更新B_EXT_ID行以删除B_EXT_ID行或类似的内容 我知道如何找到它们: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,
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或类似的内容。