【问题标题】:Combine two Salesforce SOQL Query合并两个 Salesforce SOQL 查询
【发布时间】:2021-02-06 13:15:45
【问题描述】:

我在 Salesforce 中使用了两个 SOQL 查询。

第一个查询:从 Id='00000ADFEDSFSRTGDR' 的用户中选择 Id、FirstName、LastName 第二个查询:从 UserLogin 中选择 IsFrozen,其中 UserId='00000ADFEDSFSRTGDR'

我们可以将这两个查询合并为一个查询吗?请帮我解决这个问题。

【问题讨论】:

    标签: salesforce soql salesforce-communities


    【解决方案1】:

    没有。如果您在UserUserLogin 上使用“describe”调用,您会看到它们是链接的,但describe 的结果中没有“relationshipName”字段。这就是用来链接的,有点像普通数据库中的表别名。

    // No going "up"
    System.debug(UserLogin.UserId.getDescribe().getRelationshipName());
    
    // And no going "down" either
    for(Schema.ChildRelationship cr : User.SObjectType.getDescribe().getChildRelationships()){
        if(cr.getChildSObject() == UserLogin.sObjectType && cr.getField() == UserLogin.UserId){
            System.debug(cr);
            System.debug(cr.getRelationshipName());
        }
    }
    

    所以你可以这样做

    SELECT Id, Name, 
        (SELECT PermissionSet.Name FROM PermissionSetAssignments)
    FROM User
    

    因为PermissionSetAssignment.AssigneeId 有relationshipName。但不是

    SELECT Id, Name, 
        (SELECT IsFrozen FROM UserLogin)
    FROM User
    

    “向上”也不起作用。 SELECT Account.Name FROM Contact 工作正常,但 SELECT IsFrozen, User.Name FROM UserLogin 不行。再说一遍 - 因为描述结果中没有 relationshipName

    您必须单独查询并将它们链接到代码中,例如Map<Id, User>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多