0

有谁知道如何在 apex 中为以下场景编写 SOQL

" 有两个对象说 "Countries" 和 "MappedCountries",其中国家对象将有一个完整的国家列表,而 MappedCountries 将只有几个国家(它就像国家对象的子集)。

现在我想要一个 SOQL 顶点函数,例如“我想要在 MappedCountries 对象类型中不匹配的 Country 对象类型中的条目”。

例如:Countries 对象类型由 IND AUS NZ ENG 组成,MappedCountries 对象类型由 NZ AUS 组成,则查询应从两种对象类型中获取不匹配的结果作为 IND ENG。

帮我解决这个问题。

4

2 回答 2

1

如果它们之间没有直接关系(查找),我认为您需要 2 个查询来获取数据。那是因为NOT IN喜欢返回 Ids 的常量或子查询的显式列表(因此带有国家名称的字符串将不起作用)。例如,这甚至不编译:

SELECT Id, Name FROM Account WHERE Name NOT IN (SELECT Name FROM Contact)

所以你需要这样的东西:

Set<String> countriesToExclude = new Set<String>();
for(Mapped_Country__c mc : [SELECT Name FROM Mapped_Country__c]){
    countriesToExclude.add(mc.Name);
}

List<Country__c> excludedCountries = [SELECT Name FROM Country__c WHERE Name NOT IN :countriesToExclude];

如果你有例如对象被调用Selection__c并且它有一个相关的Country__c记录列表会容易得多......你可以简单地编写类似的东西来返回没有帐户的联系人:

SELECT Id, Name FROM Contact WHERE AccountId = null
于 2012-12-05T20:22:32.520 回答
-1

我想你可以试试这个:

Select Id, Name From Countries__c Where Name NOT IN (Select Name From MappedCountries)
于 2012-12-05T10:15:22.563 回答