WITH
レコードを項目値に基づいて絞り込むことができます。たとえば、カテゴリによって絞り込んだり、ユーザのプロファイルフィードで追跡されている変更を照会して取得したりするには、WITH filteringExpression を使用します。この句 (省略可能) は、SOQL クエリの SELECT ステートメントに追加できます。
FROM 句で指定されたオブジェクトの項目のみをサポートする WHERE 句とは異なり、WITH ではその他の関連条件で絞り込めます。たとえば、WITH 句を使用して、1 つ以上のデータカテゴリグループの分類に基づいて記事を絞り込めます。WITH 句は、次の場合にのみ使用できます。
- カテゴリに基づいてレコードを絞り込む場合。「WITH DATA CATEGORY」を参照してください。
- ユーザプロファイルフィードで追跡されるレコードの変更を照会して取得する場合。『Salesforce のオブジェクトリファレンス』の「Custom Object__Feed」を参照してください。
- Apex コード内で照会する項目またはオブジェクトへのユーザアクセス権限に基づいてレコードを絞り込む場合。『Apex 開発者ガイド』の「WITH SECURITY_ENFORCED を使用した SOQL クエリの絞り込み」を参照してください。
- Apex データベース操作のユーザモードアクセスを指定する場合。デフォルトでは、Apex コードはシステムモードで実行されます。つまり、コードを実行しているユーザよりも非常に上位の権限で実行されます。Apex のセキュリティコンテキストを強化するために、WITH USER_MODE を使用することによってユーザモードアクセスを指定できます。システムモードとは異なり、ユーザモードでは実行ユーザの項目レベルセキュリティ (FLS) とオブジェクト権限が考慮されます。ユーザモードでは、共有ルールが常に適用されますが、システムモードではクラスの共有キーワードによって適用を制御できます。『Apex 開発者ガイド』の「ユーザモードでのデータベース操作 (ベータ)」を参照してください。
WITH が指定されている場合、クエリは絞り込み条件に一致し、ユーザが参照可能なレコードのみを返します。指定されていない場合、クエリは条件に一致し、ユーザが参照可能なレコードのみを返します。
以下のステートメントでは、絞り込み条件式が太字で強調表示されています。
- SELECT Title FROM KnowledgeArticleVersion WHERE PublishStatus='online' WITH DATA CATEGORY Geography__c ABOVE usa__c
- SELECT Id FROM UserProfileFeed WITH UserId='005D0000001AamR' ORDER BY CreatedDate DESC, Id DESC LIMIT 20