结合两个Salesforce SOQL查询

问题描述

我在Salesforce中使用两个SOQL查询

一个查询:从用户中选择ID,名字,姓氏,其中Id ='00000ADFEDSFSRTGDR' 第二个查询:从UserLogin中选择IsFrozen,其中UserId ='00000ADFEDSFSRTGDR'

我们可以将这两个查询合并为一个查询吗?请帮助我。

解决方法

不。如果您在UserUserLogin上使用“描述”调用,则会看到它们已链接,但描述结果中没有“ 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,(SELECT IsFrozen FROM UserLogin)
FROM User

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

您将不得不单独查询并以Map<Id,User>的形式将它们链接起来。