« 連結オブジェクト | メイン | 集計関数 »

2010年7月23日 (金)

SOQLでのリレーションの辿り方

SQLでは動的に列を指定して表を結合することができますが、SOQLでは動的に結合することはできません(そもそも結合ができない)。

SOQLではオブジェクト間に予めリレーションを設定しておくことにより、リレーションを辿ってのデータ参照が可能となります。

ということで、今日はSOQLでのリレーションの辿り方をご紹介。

子オブジェクトから親オブジェクトへのリレーションの辿り方

子オブジェクトから親オブジェクトへは、リレーション名を使用してリレーションを辿ります。

リレーション名は、参照/主従関係のカスタム項目名 + __r となります(標準項目のリレーション名は予め設定されています)。

SOQLのFrom句には必ず基点となるベースオブジェクトを指定しますが、ベースオブジェクトから最大5段階まで親のリレーションを辿ることができます。

●親リレーションを辿るサンプル

Select 
  c.Name,
  a.Name,
  u.Name
From
  Contact c, ★ベースオブジェクト
  Contact.Account a,
  Contact.Account.CreatedBy u

親オブジェクトから子オブジェクトへのリレーションの辿り方

親オブジェクトから子オブジェクトへは、 子リレーション名を使用してリレーションを辿ります。

以前は、子リレーション名を特に指定しない場合、自動的にランダムな名称が設定されてしまい、Select Id From R00NA0000001a2bkoko ・・・などと、かなり分かりづらいSOQLを書くハメになったりもしましたが、Summer '10からは、子リレーション名が必須項目となり、そのようなこともなくなりました。

子リレーション名は自オブジェクトの複数形で付けることが一般的なようです(分かりやすいですしね)。例えば、ContactからAccountへリレーションを結ぶ場合は、子リレーション名をContactsにします。

SOQLでは、メインクエリのFrom句にベースオブジェクト名を、サブクエリのFrom句に子リレーション名を指定して、データを取得します。

ここで重要なのは、親から子へは1段階しかリレーションを辿ることはできない、ということ。指定したベースオブジェクトの子オブジェクトのみリレーションを辿ることが可能です。子の子や親の子などはアクセス不可です。

●子リレーションを辿るサンプル(ContactsがAccount→Contactへ辿る子リレーション名)

Select 
  a.Name,
  (Select c.Name From Contacts c)
From
  Account

●ベースオブジェクトから親5段階、子1段階の範囲であれば、同時にデータ取得が可能

Select 
  a.Name,
  u.Name,
  (Select c.Name From Contacts c),
  (Select n.Title From Notes n)
From
  Account a,
  Account.Owner o,
  Account.Owner.CreatedBy u

●下記のように、From句にベースオブジェクトを2つ指定することは不可

Select 
  a.Name,
  u.Name
From
  Account a,
  User u

親から子へ1段階しか辿ることができないというのは、かなり大きな制約です。データモデルの設計時には必ず覚えておきましょう。

と言いつつ、もうそろそろ、2段階、3段階と子リレーションを辿れるようになるんじゃないか?と淡い期待もしてたりします(集計関数も使えるようになりましたしね)。

コメント

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。

採用情報

株式会社フレクトでは、事業拡大のため、
・Salesforce/Force.comのアプリケーション開発
・HerokuやAWSなどのクラウドプラットフォーム上
でのWebアプリケーション開発
エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみたい方、
是非ご応募下さい。

フレクト採用ページへ

会社紹介

  • 株式会社フレクトは、
      ・認定コンサルタント
      ・認定上級デベロッパー
      ・認定デベロッパー
    が在籍している、セールスフォースパートナーです。
    また、heroku partnersにも登録されています。
    herokuパートナー
    株式会社フレクト
    Salesforce/Force.com
    導入支援サービス
    弊社の認定プロフェッショナルが支援致します。
    ・Visualforce/Apexによるアプリ開発
    ・Salesforceと連携するWebアプリ開発
    も承っております。
    セールスフォースご検討の際は、
    お気軽にお問合せください。

Twitter

リファレンス

■Developer's Guide(リファレンス)
・Apex  HTML | PDF | 日本語PDF | ガバナ制限
・Visualforce  HTML | PDF
・Web Services API  HTML | PDF | 日本語PDF
・Bulk API  HTML | PDF
・REST API  HTML | PDF | 日本語PDF
・Metadata API  HTML | PDF
・Migration Tool  HTML | PDF
・AJAX Toolkit  HTML | PDF
・Data Loader PDF | 日本語PDF

■早見表 (日本語)
数式
Apex
Visualforce
Web Services API
Chatter