2012-12-05 5 views
0

에서 타의 추종을 불허하는 결과를 얻기 어느 한 시나리오SOQL - 두 개의 개체 유형

아래 나라가있을 것이다 오브젝트 나라 "와"MappedCountries을 ""두 개체 말할 수 있습니다 "의 정점에 SOQL을 작성하는 방법을 알고 있나요 국가 및 MappedCountries의 전체 목록에는 국가가 일부만 포함됩니다 (국가 개체의 하위 집합과 같습니다).

이제 MappedCountries 개체에서 일치하지 않는 Countries 개체 유형의 항목을 원한다는 것과 같은 SOQL 꼭지점 함수가 필요합니다. 유형 ".

예 : 국가 개체 유형은 IND AUS NZ ENG 및 MappedC ountries 객체 유형이 NZ AUS로 구성되면 쿼리는 IND ENG와 같이 두 객체 유형에서 일치하지 않는 결과를 가져와야합니다.

도와주세요.

답변

-1

나는 당신이 시도 할 수 있다고 생각 :

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

where 절에 SOQL에서 작동하지 않습니까? – 565

+0

예, 작동합니다 : [이 문서 읽기] (http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql_select_comparisonoperators.htm) – mast0r

+2

이 경우 작동하지 않습니다. – eyescream

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