顶点中的SOQL - 从两种对象类型中获得无与伦比的结果

时间:2012-12-05 07:13:15

标签: salesforce apex-code soql

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

“有两个对象说”国家“和”MappedCountries“,其中的国家/地区对象将拥有完整的国家/地区列表,而MappedCountries只有少数国家/地区(它就像是国家/地区对象的子集)。

现在我想要一个SOQL apex函数,例如“我希望在Region对象类型中的条目与MappedCountries对象类型不匹配”。

例如:国家/地区对象类型由IND AUS NZ ENG组成,MappedCountries对象类型由NZ AUS组成,则查询应从IND ENG获取两种对象类型的不匹配结果。

帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

我想你可以试试这个:

Select Id, Name From Countries__c Where Name NOT IN (Select Name From MappedCountries)