在关系查询中,存在一对多和多对一的关系。因为就会出现两种查询情况。
在解释查询关系之前,需要理解一下Relationship Name,如文档中contact和account的关系 ,一个Account会有多个contact,一个Contact也会有多个Account,但是最终归结的关系为Account对contact的关系为一对多。也就是说 在contact上保存有对account'的引用,这个引用的名称就是RelationshipName(区别于field name),类似于外键的名称。
下面介绍两种查询
1、多对一的查询。
salesforce 中特有的__r模式,直接关联到parent上,如contact上存有对account的引用,那么我可以直接关联出account上的相关字段。
select id,name ,account.name,account.id from contact
2、一对多的查询
嵌入式查询(nested query),这种方式适合在父的一端查询相关子的记录。如:我想查找到负责这个account的全部contact。
select id,name,(select id,name from contacts)
from account
查询结果如图:
这样就会关联出所以的contact数据,contact部分的展示形式json串。注意contacts不是对象名称,是Relationshipname
遍历的方式如下:代码借鉴
// create a map of Contacts by Account Ids
Map<Id, List<Contact>> ContactMap = new Map<Id, List<Contact>>();
// query (where/and conditions can be added as needed)
List<Account> Accounts = [Select Id, Name, (Select Id, Name From Contacts) From Account];
// loop through all retrieved Accounts
for(Account a : Accounts)
{
List<Contact> Contacts = a.getSObjects('Contacts'); // get all Contacts for the Account
ContactMap.put(a.Id, Contacts); // put the Account Contacts in a map by Account Id
}