salesForce中的soql连接查询

时间:2012-07-25 13:42:27

标签: salesforce soql

我正在努力查询,我想选择所有分支机构,然后再加入“公司(类型为帐户)”,并再次使用“联系人”。到现在为止没有运气,我做错了什么?

SELECT 
b.Id, b.Location,
  (SELECT FirstName, LastName, FROM b.Companies.Contacts 
    //i've tried combinations of __r and __c
  WHERE City == 'New York')  
FROM Branche__c b

这部分的WSDL是这样构建的:

<complexType name="Branche__c">
  ..
     <element name="Companies__r" nillable="true" minOccurs="0" type="ens:Account"/>
  ..
</complexType>
..
<complexType name="Account">
  ..
  <element name="Contacts" nillable="true" minOccurs="0" type="tns:QueryResult"/>
  ..
</complexType>

2 个答案:

答案 0 :(得分:2)

有@JCD告诉你,这是Salesforce的限制。

您只能以这种方式列出与分支相关的所有与帐户相关的联系人:

SELECT Email, Account.Name, 
FROM Contact
WHERE AccountId in (
 SELECT Companies__c
   FROM Branche__c
)

但是如果你想在联系人分支之间进行加入,你应该尝试这样的事情:

list[] res = new list[]{};
for (Branche__c br : [SELECT Id, Location ,Companies__c FROM Branche__c])
{
     List[] ContactList = [select name, (select email from contacts) from account where id = :br.Companies__c]; 
     res.add(ContactList);
}

答案 1 :(得分:0)

当您说“类型帐户”时,您的意思是“公司”是帐户的标签吗?

如果是这样,试试这个:

Select 
  Name, Id, 
  (Select FirstName, LastName From Contacts Where MailingCity = 'New York')
From Account 
Where ID IN (Select CompanyID From Branch__c)

其中CompanyID是Branch__c上的帐户关系字段的API名称。

我不确定这是否会有所帮助,但这可能就足够了。

另外,我建议在编写SOQL语句时使用Force.com Explorer来浏览元数据,而不是查看WSDL。