SOQLで複数レコードを簡単に取得!IN句の使い方完全ガイド


リスト内のIDを使用したSOQLクエリの構築方法

SalesforceでSOQLを使用して複数のレコードを一括で取得したい場合、IDのリストを条件として使用することができます。これにより、複数のレコードを効率的に取得することが可能です。


基本構文

SOQLクエリでリストのIDを条件に指定する場合、IN句を使用します。以下は基本的な構文の例です。

List<Id> recordIds = new List<Id>{'001D000000IqhSL', '001D000000IqhSM', '001D000000IqhSN'};

List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :recordIds];

ここで:

  • recordIds は、取得したいレコードのIDを格納したリスト。
  • IN :recordIds は、リスト内のIDを条件として使用する指定。

実践例

例1: 複数の取引先レコードを取得

以下のコードでは、リストに指定したIDを持つ取引先(Account)レコードを取得します。

// IDのリストを定義
List<Id> accountIds = new List<Id>{'001D000000IqhSL', '001D000000IqhSM', '001D000000IqhSN'};

// SOQLクエリでレコードを取得
List<Account> accounts = [SELECT Id, Name, Industry FROM Account WHERE Id IN :accountIds];

// 結果を出力
for (Account acc : accounts) {
    System.debug('Account Name: ' + acc.Name + ', Industry: ' + acc.Industry);
}

例2: 複数のリード(Lead)レコードを取得

以下は、リードオブジェクトで同様の操作を行う例です。

// リードIDリストを定義
List<Id> leadIds = new List<Id>{'00QD0000003tGkn', '00QD0000003tGkp'};

// SOQLクエリでリードを取得
List<Lead> leads = [SELECT Id, FirstName, LastName, Email FROM Lead WHERE Id IN :leadIds];

// 結果をデバッグ出力
for (Lead lead : leads) {
    System.debug('Lead Name: ' + lead.FirstName + ' ' + lead.LastName + ', Email: ' + lead.Email);
}

考慮点

  1. IDリストのサイズ制限
    SalesforceのSOQLでは、1つのクエリで指定できるIDリストのサイズが最大2,000件に制限されています。それを超える場合は、リストを分割してクエリを実行する必要があります。

  2. NULLチェック
    リストが空の場合にクエリを実行するとエラーになる可能性があるため、クエリの前にリストが空でないことを確認するのがベストプラクティスです。

    if (!accountIds.isEmpty()) {
        List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :accountIds];
    }
    
  3. SOQLインジェクションの回避
    ユーザー入力を直接クエリに使用する場合は、適切なバリデーションを行い、:バインド変数を使用してインジェクションを防止します。

コメント