代码之家  ›  专栏  ›  技术社区  ›  pushkar rawat

Salesforce SOQL查询:如何使用SELECT with WHERE条件

  •  0
  • pushkar rawat  · 技术社区  · 6 年前

    对于给定的SOQL查询,尝试优化SOQL查询。我有两个问题

    从salesforce获取给定用户帐户的userID

    SELECT id From User WHERE Username = 'test@testmail.com'
    

    SELECT Id,Headline__c,Description__c
    FROM Incident__c
    WHERE Id IN (SELECT Incident__c FROM Node_Affected__c 
            WHERE (Incident__r.Account__c = '034524000000uzurX')
            AND Incident__r.Indicator__c = false)
    

    现在我想将它优化为一个查询,这样就不必从外部系统进行两个api调用。所以我试着

    SELECT Id,Headline__c,Description__c
    FROM Incident__c
    WHERE Id IN (SELECT Incident__c FROM Node_Affected__c 
            WHERE (Incident__r.Account__c = null OR Incident__r.Account__c IN (SELECT id From User WHERE Username = 'test@testmail.com'))
            AND Incident__r.Indicator__c = false)
    

    MALFORMED_QUERY: 
    Incident__r.Account__c IN (SELECT id From User WHERE Username = 'test@testmail.com'))
                                              ^
    ERROR at Row:5:Column:87
    Nesting of semi join sub-selects is not supported
    

    有没有更好的方法来解决这类问题?提前感谢:)

    1 回复  |  直到 6 年前
        1
  •  0
  •   superfell    6 年前

    您应该能够使用SOQL特性跟踪外键,跟踪帐户与用户表的关系,并从那里筛选用户名,例如。

    SELECT Id, Headline__c, Description__c
    FROM Incident__c
    WHERE Id IN (SELECT Incident__c FROM Node_Affected__c 
            WHERE (Incident__r.Account__c = null OR 
                   Incident__r.Account__r.Username = 'test@testmail.com')
            AND Incident__r.Indicator__c = false)