我正在尝试将Pricebook2,Product2和PricebookEntry对象加入到一起,但不明白语法是如何工作的。
使用PricebookEntry时,3个对象与Pricebook2之间的关系为1对多,使用PricebookEntry时,Product2为1对多。我需要加入3个表并过滤Product2中的Family字段和Pricebook2中的Name字段。
此查询用于将Pricebook2加入PricebookEntry:
SELECT Name,(SELECT Name FROM PricebookEntries) FROM Pricebook2
此查询用于将Product2加入PricebookEntry:
SELECT Name,(SELECT Name FROM PricebookEntries) FROM Product2
如何在上面提取SOQL并在1个查询中将3个表连接在一起?
由于
答案 0 :(得分:0)
正如您所指出的,产品与价格手册条目之间以及价格手册与价格手册条目之间存在一对多的关系。另一种看待价格的方法是,价格表条目和产品之间以及价格表条目和价格表之间存在多对一的关系。在SQL世界中,您可以从PriceBookEntry和INNER JOIN中选择Product2和Pricebook2表,以获取除PricebookEntry表中的外键字段(即Ids)之外的其他字段信息。像这样:
SELECT
pbe.IsActive, pbe.UnitPrice, pbe.UseStandardPrice,
pbe.Pricebook2Id, pb.Name, pb.Description, pb.IsActive, pb.IsStandard,
pbe.Product2Id, p.Name, p.Description, p.Family, p.ProductCode, p.IsActive
FROM PricebookEntry pbe
INNER JOIN Pricebook2 pb ON pbe.Pricebook2Id = pb.Id
INNER JOIN Product2 p ON pbe.Product2Id = p.Id
简单吧?使用相同的逻辑,您只需要将SQL语法转换为Salesforce SOQL方式,即使用“点表示法”而不是INNER JOIN。因此,等效的SOQL查询如下所示:
SELECT
IsActive, UnitPrice, UseStandardPrice,
Pricebook2Id, Pricebook2.Name, Pricebook2.Description, Pricebook2.IsActive, Pricebook2.IsStandard,
Product2Id, Product2.Name, Product2.Description, Product2.Family, Product2.ProductCode, Product2.IsActive
FROM PricebookEntry