比較演算子
次の表に、fieldExpression 構文で使用される comparisonOperator の値を示します。
| 演算子 | 名前 | 説明 |
|---|---|---|
| = | Equals | fieldName の値が式の value に一致する場合、式は true です。 |
| != | Not equals | fieldName の値が指定した value に一致しない場合、式は true です。 |
| < | Less than | fieldName の値が指定した value より小さい場合、式は true です。 |
| <= | Less or equal | fieldName の値が指定した value 以下の式は true です。 |
| > | Greater than | fieldName の値が指定した value より大きい場合、式は true です。 |
| >= | Greater or equal | fieldName の値が指定した value 以上の場合、式は true です。 |
| LIKE | Like |
fieldName の値が指定した value のテキスト文字列の文字に一致する場合、式は true です。指定した value のテキスト文字列は、一重引用符で囲む必要があります。 LIKE 演算子は、文字列項目でのみサポートされます。この演算子は、部分的なテキスト文字列を照合するメカニズムを提供し、次の使用がサポートされます。
次のクエリ例は Appleton、Apple、Appl と一致しますが、Bappl とは一致しません。
|
| IN | IN | 値が WHERE 句の値のいずれかに等しい場合、式は true です。IN の文字列値は括弧の中に入れて、一重引用符で囲む必要があります。 IN を使用して、同じオブジェクトの別の項目に、指定された値のセットがある項目の値を照会できます。次に例を示します。 IN と NOT IN は、ID (主キー) 項目または参照 (外部キー) 項目を照会するときに、準結合および反結合でも使用できます。 |
| NOT IN | NOT IN | 値が WHERE 句の値と等しくない場合、式は true です。NOT IN の文字列値は括弧の中に入れて、一重引用符で囲む必要があります。次に例を示します。 |
| INCLUDES EXCLUDES | 複数選択リストにのみ適用されます。「複数選択リストのクエリ」を参照してください。 |
IN を使用した準結合と NOT IN を使用した反結合
準結合は、返されるレコードを制限する、IN 句の別のオブジェクトのサブクエリです。反結合は、返されるレコードを制限する、NOT IN 句の別のオブジェクトのサブクエリです。IN または NOT IN 句内の値リストをサブクエリで置き換えることにより、より複雑なクエリを作成できます。サブクエリでは、ID (主キー) 項目または参照 (外部キー) 項目で絞り込むことができます。
準結合と反結合を使用する例としては、次のようなものがあります。
- 特定のレコード種別の商談がある取引先のすべての取引先責任者を取得する。
- 有効な契約がある取引先のすべての進行中の商談を取得する。
- 商談の意思決定者である取引先責任者のすべてのオープンケースを取得する。
- 進行中の商談がないすべての取引先を取得する。
ID 項目で絞り込む場合は、Account と Contact など、親-子の準結合または反結合を作成できます。参照項目で絞り込む場合は、Contact と Opportunity などの子-子の準結合か反結合、または Opportunity と Account などの子-親の準結合か反結合を作成できます。
- ID 項目の準結合
-
WHERE 句には準結合を含めることができます。たとえば、次のクエリは、関連付けられている商談が不成立だった場合に取引先 ID を返します。
1SELECT Id, Name 2FROM Account 3WHERE Id IN 4 ( SELECT AccountId 5 FROM Opportunity 6 WHERE StageName = 'Closed Lost' 7 )この例は、Account と Opportunity の親-子の準結合です。IN 句の左のオペランド Id が ID 項目です。サブクエリは、比較対象の項目と同じ種別の項目を 1 つ返します。準結合クエリの不要な処理を防ぐための制限事項については、考慮事項を参照してください。
- 参照項目の準結合
-
次のクエリは、Twin Falls のすべての取引先責任者の ToDo ID を返します。
1SELECT Id 2FROM Task 3WHERE WhoId IN 4 ( 5 SELECT Id 6 FROM Contact 7 WHERE MailingCity = 'Twin Falls' 8 )IN 句の左のオペランド WhoId が参照項目です。このクエリの興味深い側面は、WhoId が、取引先責任者またはリードを参照できるため多態的な参照項目であるということです。サブクエリによって、結果は取引先責任者に制限されます。
- ID 項目の反結合
- 次のクエリは、進行中の商談がないすべての取引先の取引先 ID を返します。
1SELECT Id 2FROM Account 3WHERE Id NOT IN 4 ( 5 SELECT AccountId 6 FROM Opportunity 7 WHERE IsClosed = false 8 ) - 参照項目の反結合
-
次のクエリは、供給元が Web 以外のすべての取引先責任者の商談 ID を返します。
1SELECT Id 2FROM Opportunity 3WHERE AccountId NOT IN 4 ( 5 SELECT AccountId 6 FROM Contact 7 WHERE LeadSource = 'Web' 8 )この例は、Opportunity と Contact の子-子の反結合です。
- 複数の準結合または反結合
- クエリでは、準結合句または反結合句を組み合わせることができます。たとえば、次のクエリは、取引先に関連付けられている取引先責任者の姓が「Apple」のような姓の場合、進行中の商談がある取引先 ID を返します。
1SELECT Id, Name 2FROM Account 3WHERE Id IN 4 ( 5 SELECT AccountId 6 FROM Contact 7 WHERE LastName LIKE 'apple%' 8 ) 9 AND Id IN 10 ( 11 SELECT AccountId 12 FROM Opportunity 13 WHERE isClosed = false 14 ) - リレーションクエリを評価する準結合または反結合
-
SELECT 句でリレーションクエリを評価する準結合または反結合を作成できます。たとえば次のクエリは、商談の品目の合計値が $10,000 を超える場合、商談 ID および関連品目を返します。
1SELECT Id, (SELECT Id from OpportunityLineItems) 2FROM Opportunity 3WHERE Id IN 4 ( 5 SELECT OpportunityId 6 FROM OpportunityLineItem 7 WHERE totalPrice > 10000 8 )
準結合と反結合についての考慮事項
準結合および反結合クエリには多大な処理作業が必要となるため、Salesforce では可能な限り最良のパフォーマンスを維持するために次の制限を定めています。
-
基本制限:
- 1 つの WHERE 句では、IN または NOT IN ステートメントを 2 つまでしか使用できません。
- 準結合および反結合と NOT 演算子は一緒に使用できません。併用すると、準結合が反結合に、反結合が準結合に変換されます。NOT 演算子を使用する代わりに、適切な準結合または反結合形式でクエリを記述します。
-
主クエリの制限:
次の制限は、準結合または反結合クエリの主 WHERE 句に適用されます。
- 左のオペランドは、1 つの ID (主キー) 項目または参照 (外部キー) 項目を照会する必要があります。サブクエリで選択した項目は、参照項目にできます。次に例を示します。
1SELECT Id 2 FROM Idea 3 WHERE (Id IN (SELECT ParentId FROM Vote WHERE CreatedDate > LAST_WEEK AND Parent.Type='Idea')) - 左のオペランドにはリレーションを使用できません。たとえば、次の準結合クエリは Account.Id リレーション項目があるため無効です。
1SELECT Id 2FROM Contact 3WHERE Account.Id IN 4 ( 5 SELECT ... 6 )
- 左のオペランドは、1 つの ID (主キー) 項目または参照 (外部キー) 項目を照会する必要があります。サブクエリで選択した項目は、参照項目にできます。次に例を示します。
-
サブクエリの制限:
- サブクエリは、主クエリと同じオブジェクト種別を参照する項目を照会する必要があります。
- サブクエリ内で一致したレコードの数に制限はありません。主クエリには標準の SOQL クエリの制限が適用されます。
-
サブクエリで選択した列は、外部キー項目であることが必要で、リレーションをトラバースすることはできません。つまり、この制限により、サブクエリの選択した項目でドット表記は使用できません。たとえば、次のクエリは有効です。
1SELECT Id, Name 2FROM Account 3WHERE Id IN 4 ( 5 SELECT AccountId 6 FROM Contact 7 WHERE LastName LIKE 'Brown_%' 8 )AccountId の代わりに Account.Id (ドット表記) を使用することはサポートされていません。同様に、Contact.AccountId FROM Case のようなサブクエリは無効です。
- サブクエリで主クエリのオブジェクトと同じオブジェクトは照会できません。そのような自己準結合クエリは、準結合または反結合を使用せずに記述できます。たとえば、次の自己準結合クエリは無効です。
1SELECT Id, Name 2FROM Account 3WHERE Id IN 4 ( 5 SELECT ParentId 6 FROM Account 7 WHERE Name = 'myaccount' 8 )次のような有効な形式でクエリを記述し直します。1SELECT Id, Name 2FROM Account 3WHERE Parent.Name = 'myaccount' - 準結合または反結合ステートメントを別の準結合または反結合ステートメント内にネストできません。
- 準結合と反結合は HAVING 句では使用できません。
- 主 WHERE ステートメントで準結合と反結合を使用できますが、サブクエリの WHERE ステートメントでは使用できません。たとえば、次のクエリは有効です。
1SELECT Id 2 FROM Idea 3 WHERE (Idea.Tit’sle LIKE 'Vacation%') 4AND (Idea.LastCommentDate > YESTERDAY) 5AND (Id IN (SELECT ParentId FROM Vote 6 WHERE CreatedById = '005x0000000sMgYAAU' 7 AND Parent.Type='Idea'))次のクエリは、ネストされたクエリが 1 つ下のレベルなので無効です。
1SELECT Id 2 FROM Idea 3 WHERE 4 ((Idea.Title LIKE 'Vacation%') 5 AND (CreatedDate > YESTERDAY) 6 AND (Id IN (SELECT ParentId FROM Vote 7 WHERE CreatedById = '005x0000000sMgYAAU' 8 AND Parent.Type='Idea') 9 ) 10 OR (Idea.Title like 'ExcellentIdea%')) - サブクエリと OR を組み合わせて使用することはできません。
- COUNT、FOR UPDATE、ORDER BY、LIMIT はサブクエリではサポートされていません。
- 現在、サブクエリでは次のオブジェクトはサポートされていません。
- ActivityHistory
- Attachments
- Event
- Note
- OpenActivity
- Tags (AccountTag、ContactTag、その他すべてのタグオブジェクト)
- Task