You need to sign in to do that
Don't have an account?

SOQLでオブジェクトのListをバインド変数として使いたい
お世話になっております。
SOQLでオブジェクトのListをバインド変数として使いたいのですが、可能でしょうか。
参考サイト
http://blog.flect.co.jp/salesforce/2011/11/soql-a233.html
上記サイトにて、
※for文内でSOQLを使わない形で実装したいです。
ご存知の方がいらっしゃいましたら、ご教授をどうぞ宜しくお願い致します。
SOQLでオブジェクトのListをバインド変数として使いたいのですが、可能でしょうか。
参考サイト
http://blog.flect.co.jp/salesforce/2011/11/soql-a233.html
上記サイトにて、
// Listの場合 List<String> nameList = new List<String>(); nameList.add('佐藤'); nameList.add('木村'); List<Contact> ctcList = [Select Id From Contact Where LastName IN :nameList];とありますが、
// List<Contact>の場合 List<Contact> conList = new List<Contact>(); conList = [Select Id,AccountId From Contact]; List<Account> accList = [Select Id From Account Where Id = :conList.AccountId ]; //←コンパイルエラー上記のように、List<Contact>をバインド変数として使うイメージです。
※for文内でSOQLを使わない形で実装したいです。
ご存知の方がいらっしゃいましたら、ご教授をどうぞ宜しくお願い致します。
一度3項目分のリストを用意してOR条件などで取得した後、ループ処理内で一致する項目を判定という形になると思います。
もしくは、3項目分の値を連結した数式を用意してWHEREの判定で使用するという方法も可能だと思います。
All Answers
AccountIdはID型なので、List<Id>の方がいいかもしれません。
ご教授まことにありがとうございます。
SOQLでオブジェクトのリストをバインドするようなことはやはりできないですよね。
オブジェクト間で、1,2項目が一致するものを取得したい場合はListやMapを使用してfor文で回せば良いかなと思っていたのですが、
例えばオブジェクト間で3項目以上一致するものを指定したいときに、オブジェクトのList型のようなものを使えないのかな、
と疑問に思ったところでした。
具体的な例を挙げますと、
カスタムオブジェクトAobj__cとBobj__cがあり、
それぞれA1__c、A2__c、A3__c、B1__c、B2__c、B3__cという項目がある場合に、 といったイメージです。
3項目以上比較したいときは3回以上ループを回す。。もしくはfor文内でSELECTするしかないですよね。
一度3項目分のリストを用意してOR条件などで取得した後、ループ処理内で一致する項目を判定という形になると思います。
もしくは、3項目分の値を連結した数式を用意してWHEREの判定で使用するという方法も可能だと思います。
ありがとうございました!!