How do I query a custom object record that matches following scenario.

Custom object has master detail relationship with Account. So I want to rerieve a custom record who's account matches with logged in user's--contact--account. I need it for lightning component so that I can use it on community.

is this achievable with SOQL?

  • 1
    What have you tried so far, share some SOQL which you had tried or thinking to use. – Raul Jul 11 '17 at 20:18
  • What is "User's--Contact--Account"? What are the relationships between those three objects? – Sebastian Kessel Jul 11 '17 at 20:18
  • @SebastianKessel User has standard lookup filed to contact and contact has standard lookup field to Account – Aman Jul 11 '17 at 20:22
  • @Rahul while I don't have completed query since not sure how to go down at the account level from user here is what I have been brain storming.. 'select name,status account from expense__c where account in(select name, contact from user ) ' – Aman Jul 11 '17 at 20:25

User object has both AccountId and ContactId field populated for a community user.

Simplest query would be using a SOQL join as follows:

SELECT Id, Name, Status__c from Expense__c 
    Account__c IN (SELECT AccountId FROM User WHERE Id = :UserInfo.getUserId())

As I do not have custom object in my org, adding similar SOQL with standard object for reference which I have verified and works:

    AccountId IN (SELECT AccountId FROM User WHERE Id = :UserInfo.getUserId())
  • I did not suggest the "IN" alternative because it is less performant, but I agree that it would work just fine. – Sebastian Kessel Jul 11 '17 at 23:44

You can do what you want in SoQL, but you're going to have to do that in two steps.

Because Acc->Conctact->User goes "down" in hierarchy and Custom ->Account goes "up", you won't be able to get them together in the same query.

Here is a way to do it:

Id accountId = [select Contact.AccountId from User where Id = :UserInfo.getUserID()].Contact.AccountId;

List<Custom__c> custObj = [select Id from Custom__c where Account__c = :accountId];


As Rahul suggested below

 List<Custom__c> custObj = [select Id 
                               from Custom__c
                               where Account__c in (SELECT Contact.AccountId 
                                    FROM User 
                                    WHERE Id = :UserInfo.getUserId())];

should also work (did not get a chance to test it), though the IN clause makes the query less performant... which may not be a problem in your case.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.