Skip to main content

SUBQUERY

Specify child relationship name and pass list of fields.

SELECT Id, Name, (
SELECT Id, Name FROM Contacts
) FROM Account
public inherited sharing class SOQL_Account extends SOQL implements SOQL.Selector {
public static SOQL_Account query() {
return new SOQL_Account();
}

private SOQL_Account() {
super(Account.SObjectType);
with(Account.Id, Account.Name);
}
}

public with sharing class MyController {

public static List<Account> getAccountsWithContacts() {
return SOQL_Account.query()
.with(SOQL.SubQuery.of('Contacts')
.with(Contact.Id, Contact.Name)
).toList();
}
}

SOQL supports relationship queries that traverse up to five levels of parent-child records.

Query Five Levels of Parent-to-Child Relationships in SOQL Queries

SELECT Name, (
SELECT LastName , (
SELECT AssetLevel FROM Assets
) FROM Contacts
) FROM Account
public inherited sharing class SOQL_Account extends SOQL implements SOQL.Selector {
public static SOQL_Account query() {
return new SOQL_Account();
}

private SOQL_Account() {
super(Account.SObjectType);
with(Account.Id, Account.Name);
}
}

public with sharing class MyController {

public static List<Account> getAccountsWithContactsAndTheirAssets() {
return SOQL_Account.query()
.with(SOQL.SubQuery.of('Contacts')
.with(Contact.LastName)
.with(SOQL.SubQuery.of('Assets')
.with(Asset.AssetLevel)
)
).toList();
}
}