この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

オブジェクトに対する SOQL の制限

SOQL では、特定の制限が検索結果のオブジェクトと状況に適用されます。SOQL 制限は、ContentDocumentLink オブジェクト、ContentHubItem オブジェクト、Big Object、外部オブジェクト、NewsFeed、KnowledgeArticleVersion、RecentlyViewed、TopicAssignment、UserRecordAccess、UserProfileFeed、Vote に対して定義されています。

一部のオブジェクトや状況では、SOQL に特定の制限があります。

オブジェクト 説明
ContentDocumentLink SOQL クエリの絞り込みでは、IdContentDocumentIdLinkedEntityId のいずれかを条件にする必要があります。
ContentHubItem SOQL クエリの絞り込みでは、IdExternalIdContentHubRepositoryId のいずれかを条件にする必要があります。
カスタムメタデータ型 カスタムメタデータ型は、次の SOQL クエリ構文をサポートします。
1SELECT fieldList [...]
2FROM objectType
3    [USING SCOPE filterScope]
4[WHERE conditionExpression]
5[ORDER BY field {ASC|DESC} [NULLS {FIRST|LAST}] ]
  • fieldList および conditionExpression にメタデータリレーション項目を使用できます。
  • FROM に追加できるのは 1 つのオブジェクトのみです。
  • 次の演算子を使用できます。
    • IN および NOT IN
    • =>>=<<=、および !=
    • LIKE (ワイルドカードを含む)
    • AND
  • リレーション以外の項目にのみ ORDER BY を使用できます。
  • リレーション以外の複数の項目で ORDER BYASC、および DESC を使用できます。
  • ORDER BY は、並び替えられる項目が選択済みの項目の場合にのみ使用できます。
  • メタデータリレーション項目では、すべての標準リレーションクエリがサポートされています。
Big Object
  • SOQL クエリは、Big Object のインデックスに定義された順序で欠落のない項目でのみ絞り込むことができます。
  • クエリの最後の項目では次の演算子のみを使用できます。
    • =<><=>=、および IN
    • クエリのそれより前の項目では = 演算子のみを使用できます。
  • Big Object では、次の演算子はサポートされていません。
    • !=LIKENOT INEXCLUDES、および INCLUDES
外部オブジェクト
  • 外部オブジェクトが含まれるサブクエリが取得できるデータは、最大 1,000 行です。
  • 各 SOQL クエリ内の結合は、外部オブジェクトとその他の種別のオブジェクト全体で最大 4 個です。

    クエリの実行時、結合ごとに外部システムへの往復処理が必要です。クエリ内の各結合に対して長めの応答時間を想定してください。

  • 外部オブジェクトでは、次の集計関数と句をサポートしていません。
    • AVG() 関数
    • COUNT(fieldName) 関数 (ただし、COUNT() はサポートされている)
    • HAVING
    • GROUP BY
    • MAX() 関数
    • MIN() 関数
    • SUM() 関数
  • 外部オブジェクトでは、以下もサポートしていません。
    • EXCLUDES 演算子
    • FOR VIEW
    • FOR REFERENCE
    • INCLUDES 演算子
    • LIKE 演算子
    • toLabel() 関数
    • TYPEOF
    • WITH
次の制限は、Salesforce Connect の OData 2.0 および 4.0 アダプタにのみ適用されます。
  • 外部オブジェクトの場合、ORDER BY 句に次の制限があります。
    • NULLS FIRSTNULLS LAST は無視されます。
    • 外部オブジェクトは、リレーションクエリの ORDER BY 句をサポートしません。
  • COUNT() 集計関数は、外部データソースで [要求の行数] が有効になっている外部オブジェクトでのみサポートされます。特に、外部システムからの応答には、結果セットの行の合計数を含める必要があります。
次の制限は、Salesforce Connect のカスタムアダプタにのみ適用されます。
  • 外部オブジェクトのロケーションベースの SOQL クエリはサポートされていません。
  • 外部オブジェクトの SOQL クエリに次の要素が含まれている場合、クエリは失敗します。
    • convertCurrency() 関数
    • UPDATE TRACKING
    • UPDATE VIEWSTAT
    • USING SCOPE
  • ORDER BY 句の次の構文は無視されます。
    • NULLS FIRST 構文
    • NULLS LAST 構文
  • Apex テストでは、動的 SOQL を使用して外部オブジェクトを照会します。外部オブジェクトの静的 SOQL クエリを実行するテストは失敗します。

次の制限は、SecureAgent を使用する SharePoint 2010/2013 の外部のデータソースに関連付けられている外部オブジェクトにのみ適用されます。

  • 外部オブジェクトの SOQL クエリでは、IN 句で ID が約 15 個よりも多いと、エラー「この操作はセキュアエージェントには複雑すぎます」が返されます。IN 句の正確な制限は、SharePoint ID の長さに応じて異なります。
KnowledgeArticleVersion
  • 最良の結果を得るには、PublishStatus の 1 つの値で絞り込みます。各記事のすべてのバージョンを検索するには、PublishStatus フィルタを省略し、1 つ以上のプライマリキー ID で絞り込みます。特定の記事のすべてのアーカイブバージョンを取得するには、SOQL フィルタで IsLatestVersionfalse に設定します。
  • API バージョン 46.0 以前の場合、デフォルトでは、クエリの実行時に PublishStatus で絞り込まないと、公開記事が返されます。API バージョン 47.0 以降の場合、Lightning Knowledge が有効のときは、ドラフト記事、公開記事、およびアーカイブ済み記事が返されます。
  • セキュリティをサポートするために、PublishStatus 値が Draft の記事は「ドラフト記事の表示」権限を持つユーザにのみ表示されます。同様に、PublishStatus 値が Archived の記事は「アーカイブ済み記事の表示」権限を持つユーザにのみ表示されます。
  • アーカイブ済み記事のバージョン���、Knowledge__kav オブジェクトに保存されます。アーカイブ済み記事のバージョンを照会するには、記事の Id を指定し、IsLatestVersion='0' を設定します。
  • KnowledgeArticleVersion オブジェクトでは、Apex SOQL ステートメントでバインド変数を使用できません。たとえば、次の SOQL ステートメントでは、コンパイルエラーが発生します。
    1final String PUBLISH_STATUS_ONLINE = 'Online';
    2List<Knowledge__kav> articles = [ 
    3SELECT Id FROM Knowledge__kav 
    4WHERE PublishStatus = :PUBLISH_STATUS_ONLINE 
    5];

    代わりに、次の動的 SOQL を使用します。『Apex 開発者ガイド』「動的 SOQL」を参照してください。

    1final String PUBLISH_STATUS_ONLINE = 'Online'; 
    2final String q = 'SELECT Id, PublishStatus FROM Knowledge__kav 
    3WHERE PublishStatus = :PUBLISH_STATUS_ONLINE';
    4List<Knowledge__kav> articles = Database.query(q);
NewsFeed
  • ログインしたユーザに「すべてのデータの参照」権限がある場合、SOQL の制限はありません。この権限がない場合は、LIMIT 句に 1,000 レコード以下を指定してください。
  • リレーションを使用する項目に対して SOQL ORDER BY は使用できません。SOQL クエリでは、ORDER BY はルートオブジェクトの項目に対して使用してください。
RecentlyViewed RecentlyViewed オブジェクトは、ログインユーザがレコードを表示または参照するたびに更新されます。また、SOQL クエリで FOR VIEW または FOR REFERENCE 句を使用してレコードを取得した場合にも更新されます。最新のデータを確実に使用できるようにするには、1 オブジェクトにつきレコードが 200 件までになるよう、RecentlyViewed データを定期的に切り捨てます。RecentlyViewed データは 90 日間保持され、90 日が経過すると定期的に削除されます。
TopicAssignment
ログインしたユーザに「すべてのデータの参照」権限がある場合、SOQL の制限はありません。そうでない場合は、次のいずれかの操作を実行します。
  • LIMIT 句に 1,100 件以下のレコードを指定する。
  • 「=」を指定した WHERE 句を使用する場合に、Id または Entity を絞り込む。
UserRecordAccess
  • 必ず『SOAP API 開発者ガイド』で指定されたクエリ形式を使用してください。
  • ORDER BY 句を含めることができます。SELECT HasAccess の場合は ORDER BY HasAccessSELECT MaxAccessLevel の場合は ORDER BY MaxAccessLevel を使用する必要があります。
  • クエリ可能な最大レコード数は 200 件です。
UserProfileFeed
  • ログインしたユーザに「すべてのデータの参照」権限がある場合、SOQL の制限はありません。この権限がない場合は、LIMIT 句に 1,000 レコード以下を指定してください。
  • リレーションを使用する項目に対して SOQL ORDER BY は使用できません。SOQL クエリでは、ORDER BY はルートオブジェクトの項目に対して使用してください。

また、SOQL クエリには WITH UserId = {userId] を含める必要があります。

Vote
  • ParentId = [単一の ID]
  • Parent.Type = [単一型]
  • Id = [単一の ID]
  • Id IN = [ID のリスト]

他の SOQL 制限については、『Salesforce Developer の制限および割り当てクイックリファレンス』「SOQL と SOSL の制限」を参照してください。