java - 比较两个唯一的记录集并提取缺失记录的 ID

标签 java postgresql salesforce apex soql

在帐户上,我有两个对象 Monthly 和 Yearly,它们与帐户有主从关系。

Monthly 具有每个月捕获的记录。例如美国、GBR、IND 等

Yearly 有美国、GBR、IND 等的年度记录

我们已经确定我们从数据库中提取的年度记录不匹配,并且正在添加一些其他国家/地区,例如

每月有 - 美国、英国、印度 每年应该有——美国、英国、印度 但我们有 - 美国、GBR、IND 和 AUS,这是错误的。

我们想找出有AUS的记录,然后删除或重新发送信息。

每月和每年的唯一字段是

distributor__c = Master detail relationship with Account

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')

展望 future ,您可以考虑一些保护措施,“您不能在这个国家/地区插入 Yearly,因为没有匹配的 Monthly”。您可以在 insert trigger 之前使用它,但也有一个无代码的解决方案。检查 VLOOKUP 函数以及如何在验证规则中使用它。但这需要您为每月记录提供唯一匹配的 Name 值,我不知道您那里有什么,可能是一些无用的自动编号...

关于java - 比较两个唯一的记录集并提取缺失记录的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48295689/

相关文章:

c# - 是否有适用于 Salesforce REST Api 的 c# 包装器?

java - 在Java中,repaint()不会调用paintComponent()

python - 如何在 Django View 中渲染对象?

postgresql - postgres 锁表以避免读/写异常

postgresql - 如何将 CSV 文件中的数据自动填充到 PostgreSQL?

apache-kafka - 从 Salesforce 使用 Kafka 主题

java - 设置值后 SharedPreferences 返回默认值

Java,将分钟添加到日期,奇怪的异常

java - 无法打印从服务器传输到客户端的结果集

python - simple_salesforce python 中的父子关系查询,从有序字典中提取