Salesforce SOQL是否能够以mysql风格进行自连接?

Salesforce SOQL是否能够以mysql风格进行自连接?,salesforce,apex,self-join,soql,Salesforce,Apex,Self Join,Soql,是否可以使用表别名进行自联接?假设我是一家书店,我想让所有上周和本周购买了一本书的顾客都来。在MySQL中,这看起来像这样: SELECT Account.id from Opportunity o1, Opportunity o2 WHERE o1.closeDate = Last_WEEK AND o2.closeDate = This_WEEK AND o1.Account = o2.Account MySQL中的等价物是什么?这让我一直感到困惑。您不

是否可以使用表别名进行自联接?假设我是一家书店,我想让所有上周和本周购买了一本书的顾客都来。在MySQL中,这看起来像这样:

    SELECT Account.id from Opportunity o1, Opportunity o2    
    WHERE o1.closeDate = Last_WEEK AND o2.closeDate = This_WEEK 
    AND  o1.Account = o2.Account

MySQL中的等价物是什么?这让我一直感到困惑。

您不能在SOQL中将一个Opportunity帐户Id与另一个进行比较(
o1.Account=o2.Account
)。如果您尝试,您将收到以下信息:

仅在Apex代码中允许绑定变量

相反,如果您重新编写SOQL以使用子查询,您将得到一个不同的错误

SELECT AccountId from Opportunity o1  
where o1.closeDate = LAST_WEEK 
  AND o1.Account in 
  (SELECT AccountId from Opportunity o2 WHERE o2.closeDate = THIS_WEEK)
给出:

内部和外部选择不应位于同一对象类型上

您需要:

  • 执行两个查询以获取所需的数据。您可以将第一个查询的结果帐户ID作为where子句筛选器提供给第二个查询
  • 在一个SOQL查询中检索具有关闭日期的帐户ID,然后使用代码构建所需的集合
  • 顺便说一句,是询问Salesforce特定问题的好地方