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();
}
}