对Relationship Queries 的理解(nested query)

Relationship Queries

在关系查询中,存在一对多和多对一的关系。因为就会出现两种查询情况。

在解释查询关系之前,需要理解一下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
}



     



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值