是否有人知道如何在apex中为以下场景编写SOQL
“有两个对象说”国家“和”MappedCountries“,其中的国家/地区对象将拥有完整的国家/地区列表,而MappedCountries只有少数国家/地区(它就像是国家/地区对象的子集)。
现在我想要一个SOQL apex函数,例如“我希望在Region对象类型中的条目与MappedCountries对象类型不匹配”。
例如:国家/地区对象类型由IND AUS NZ ENG组成,MappedCountries对象类型由NZ AUS组成,则查询应从IND ENG获取两种对象类型的不匹配结果。
帮我解决这个问题。
答案 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)