【发布时间】:2011-03-31 13:03:49
【问题描述】:
我有一个 SOQL 查询。如果查询遍历关系,则字段列表可以包含子查询。例如:
SELECT Account.Name, (SELECT Contact.LastName FROM Account.Contacts) FROM Account
我无法理解“穿越关系”这句话,谁能解释一下?
【问题讨论】:
标签: sql salesforce force.com soql
我有一个 SOQL 查询。如果查询遍历关系,则字段列表可以包含子查询。例如:
SELECT Account.Name, (SELECT Contact.LastName FROM Account.Contacts) FROM Account
我无法理解“穿越关系”这句话,谁能解释一下?
【问题讨论】:
标签: sql salesforce force.com soql
我相信他们是说,如果它们有关系并且您使用子查询,您可以使用 SELECT 从与 FROM 子句中的表有关系的表中返回字段。在您的示例中,即使您的 FROM 是从“Account”中提取的,您也可以使用子查询从“Contact”表中返回“LastName”,因为那里存在关系(“Account.Contacts”)。
【讨论】:
在这种情况下,这意味着您可以从“one”端对象的查询中的“many”端调用一对多关系。实际上,它类似于 SQL 中的嵌套查询,基于顶部查询中游标的当前位置查询子表。区别主要在于结果集在 SQL 中以平面开头,而在 SOQL 中则以分层形式开始。
为了更清楚,这个查询意味着:foreach 帐户加载名称并遍历其所有联系人以检索联系人的姓氏。如果一个帐户有 10 个联系人,您将获得一个主行,其联系人列表将包含 10 行
【讨论】:
不是有效的 sql。子查询应该有一个连接,否则它将返回多条记录,这将违反主查询每行一条记录的规则
【讨论】: