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

クエリ結果について

クエリ結果は、ネスト化されたオブジェクトとして返されます。SOQL クエリのメイン SELECT ステートメントで処理される主なオブジェクトは、サブクエリのクエリ結果を含みます。

たとえば、次のように親-子または子-親構文のいずれかを使用して、クエリを作成できます。

  • 子-親:
    1SELECT Id, FirstName, LastName, AccountId, Account.Name
    2
    3FROM Contact 
    4
    5WHERE Account.Name LIKE 'Acme%'

    このクエリは、WHERE 句の条件を満たすすべての取引先責任者に関して、(返されるレコードが多すぎない場合) 1 行ごとに 1 つのクエリ結果を返します。

  • 親-子:
    1SELECT Id, Name,
    2
    3  (
    4
    5    SELECT Id, FirstName, LastName
    6
    7    FROM Contacts
    8
    9  )
    10
    11FROM Account
    12
    13  WHERE Name like 'Acme%'

    このクエリは、取引先のセットを返します。そして、各取引先内では、サブクエリからの取引先責任者情報を含む Contact 項目のクエリ結果セットを返します。

サブクエリの結果でも、通常のクエリ結果と同様に、子の数が多い場合、すべてのレコードを取得するには queryMore() の使用が必要になることがあります。たとえば、取引先にサブクエリを含むクエリを発行する場合、クライアントアプリケーションは、次のようにサブクエリからの結果も処理する必要があります。
  1. Account オブジェクトにクエリを実行します。
  2. queryMore() で取引先 QueryResult を反復処理します。
  3. 各取引先オブジェクトについては、取引先責任者オブジェクトの QueryResult を取得します。
  4. 各取引先責任者の QueryResultqueryMore() を使用して子取引先責任者を反復処理します。

次のサンプルは、サブクエリ結果を処理する方法を示しています。

1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17private void querySample() {
18
19  QueryResult qr = null;
20
21  try {
22
23    qr = connection.query("SELECT a.Id, a.Name, " +
24
25      "(SELECT c.Id, c.FirstName, " +
26
27      "c.LastName FROM a.Contacts c) FROM Account a");
28
29    boolean done = false;
30
31    if (qr.getSize() > 0) {
32
33      while (!done) {
34
35        for (int i = 0; i < qr.getRecords().length; i++) {
36
37        Account acct = (Account) qr.getRecords()[i];
38
39        String name = acct.getName();
40
41        System.out.println("Account " + (i + 1) + ": " + name);
42
43        printContacts(acct.getContacts());
44
45        }
46
47        if (qr.isDone()) {
48
49          done = true;
50
51        } else {
52
53          qr = connection.queryMore(qr.getQueryLocator());
54
55        }
56
57      }
58
59    } else {
60
61      System.out.println("No records found.");
62
63    }
64
65    System.out.println("\nQuery succesfully executed.");
66
67  } catch (ConnectionException ce) {
68
69    System.out.println("\nFailed to execute query successfully, error message " +
70
71    "was: \n" + ce.getMessage());
72
73  }
74
75}
76
77
78
79private void printContacts(QueryResult qr) throws ConnectionException {
80
81  boolean done = false;
82
83  if (qr.getSize() > 0) {
84
85    while (!done) {
86
87    for (int i = 0; i < qr.getRecords().length; i++) {
88
89      Contact contact = (Contact) qr.getRecords()[i];
90
91      String fName = contact.getFirstName();
92
93      String lName = contact.getLastName();
94
95      System.out.println("Child contact " + (i + 1) + ": " + lName 
96
97      + ", " + fName);
98
99    }
100
101    if (qr.isDone()) {
102
103      done = true;
104
105    } else {
106
107      qr = connection.queryMore(qr.getQueryLocator());
108
109    }
110
111    }
112
113  } else {
114
115    System.out.println("No child contacts found.");
116
117  }
118
119}
120
121