比较两个唯一的记录集并提取缺失记录的 ID
Compare two Unique set of records and pull the ID of the Missing Record
在帐户上,我有两个对象 Monthly 和 Yearly,它们与帐户有主从关系。
每月有每个月捕获的记录。例如美国、GBR、IND ETC
Yearly 记录了美国、GBR、IND ETC
我们发现我们从数据库中提取的年度记录不匹配,并且正在添加一些其他国家/地区,例如
每月有 - 美国、英国、印度
每年应该有——美国、英国、印度
但我们有 - 美国、GBR、IND 和 AUS,这是错误的。
我们想找出有AUS的记录,然后删除或重新发送信息。
每月和每年的唯一字段是
distributor__c = 与帐户的主要明细关系
AC_Sponsor_Key__c = Country+distributor ID 在两个对象中都是唯一的
请帮我解决这个问题
您没有指定您是在 Salesforce 还是 Postgres 中寻找解决方案 ;)
那么"yearly"(应该叫"annual")相关列表的记录比"monthly"多?
您可以在帐户上有 2 个文本字段,其中包含 "GBR;IND;USA" 等值,然后简单地比较两者(排序以获得最佳结果)。您可以使用触发器或直接从源系统填充它们。
否则 - 这应该会给您一些想法。您可能必须在帐户上放置一些过滤器以限制结果集。或者使用此代码片段进行批处理?
List<Account> accs = [SELECT Id, Name
FROM Account
WHERE Id IN (SELECT Distributor__c FROM Monthly__c)
AND Id IN (SELECT Distributor__c FROM Yearly__c)
ORDER BY Name
LIMIT 1000];
Set<String> keys = new Set<String>();
for(Monthly__c m : [SELECT AC_Sponsor_Key__c
FROM Monthly__c
WHERE Distributor__c IN :accs AND AC_Sponsor_Key__c != null]){
keys.add(m.AC_Sponsor_Key__c);
}
for(Yearly__c y : [SELECT Id, Distributor__c, AC_Sponsor_Key__c
FROM Yearly__c
WHERE Distributor__c IN :accs AND NOT IN :keys
ORDER BY Distributor__c, AC_Sponsor_Key__c]){
System.debug(y);
}
或者您可以尝试这样的操作(纯 SOQL/报告,无 Apex)。不过,您必须 运行 每个国家/地区。
SELECT Id, Name,
(SELECT Id FROM Yearlys__r WHERE Country__c = 'AUS')
FROM Account
WHERE Id IN (SELECT Distributor__c FROM Yearly__c WHERE Country__c = 'AUS')
AND Id NOT IN (SELECT Distributor__c FROM Monthly__c WHERE Country__c = 'AUS')
SELECT Id, Distributor__c, Distributor__r.Name
FROM Yearly__c
WHERE Country__c = 'AUS'
AND Distributor__c NOT IN (SELECT Distributor__c FROM Monthly__c WHERE Country__c = 'AUS')
展望未来,您可以寻求一些保护措施,"you can't insert Yearly with this country because there's no matching Monthly"。您可以使用 before insert trigger
来完成,但也有一个无代码的解决方案。检查 VLOOKUP 函数以及如何在验证规则中使用它。但这需要您为每月记录提供唯一匹配的 Name
值,我不知道您那里有什么,可能是一些无用的自动编号...
在帐户上,我有两个对象 Monthly 和 Yearly,它们与帐户有主从关系。
每月有每个月捕获的记录。例如美国、GBR、IND ETC
Yearly 记录了美国、GBR、IND ETC
我们发现我们从数据库中提取的年度记录不匹配,并且正在添加一些其他国家/地区,例如
每月有 - 美国、英国、印度 每年应该有——美国、英国、印度 但我们有 - 美国、GBR、IND 和 AUS,这是错误的。
我们想找出有AUS的记录,然后删除或重新发送信息。
每月和每年的唯一字段是
distributor__c = 与帐户的主要明细关系
AC_Sponsor_Key__c = Country+distributor ID 在两个对象中都是唯一的
请帮我解决这个问题
您没有指定您是在 Salesforce 还是 Postgres 中寻找解决方案 ;)
那么"yearly"(应该叫"annual")相关列表的记录比"monthly"多?
您可以在帐户上有 2 个文本字段,其中包含 "GBR;IND;USA" 等值,然后简单地比较两者(排序以获得最佳结果)。您可以使用触发器或直接从源系统填充它们。
否则 - 这应该会给您一些想法。您可能必须在帐户上放置一些过滤器以限制结果集。或者使用此代码片段进行批处理?
List<Account> accs = [SELECT Id, Name
FROM Account
WHERE Id IN (SELECT Distributor__c FROM Monthly__c)
AND Id IN (SELECT Distributor__c FROM Yearly__c)
ORDER BY Name
LIMIT 1000];
Set<String> keys = new Set<String>();
for(Monthly__c m : [SELECT AC_Sponsor_Key__c
FROM Monthly__c
WHERE Distributor__c IN :accs AND AC_Sponsor_Key__c != null]){
keys.add(m.AC_Sponsor_Key__c);
}
for(Yearly__c y : [SELECT Id, Distributor__c, AC_Sponsor_Key__c
FROM Yearly__c
WHERE Distributor__c IN :accs AND NOT IN :keys
ORDER BY Distributor__c, AC_Sponsor_Key__c]){
System.debug(y);
}
或者您可以尝试这样的操作(纯 SOQL/报告,无 Apex)。不过,您必须 运行 每个国家/地区。
SELECT Id, Name,
(SELECT Id FROM Yearlys__r WHERE Country__c = 'AUS')
FROM Account
WHERE Id IN (SELECT Distributor__c FROM Yearly__c WHERE Country__c = 'AUS')
AND Id NOT IN (SELECT Distributor__c FROM Monthly__c WHERE Country__c = 'AUS')
SELECT Id, Distributor__c, Distributor__r.Name
FROM Yearly__c
WHERE Country__c = 'AUS'
AND Distributor__c NOT IN (SELECT Distributor__c FROM Monthly__c WHERE Country__c = 'AUS')
展望未来,您可以寻求一些保护措施,"you can't insert Yearly with this country because there's no matching Monthly"。您可以使用 before insert trigger
来完成,但也有一个无代码的解决方案。检查 VLOOKUP 函数以及如何在验证规则中使用它。但这需要您为每月记录提供唯一匹配的 Name
值,我不知道您那里有什么,可能是一些无用的自动编号...