如何在Salesforce中进行左内联接

时间:2013-08-13 16:56:49

标签: salesforce left-join soql

salesforce架构中有两个表

               +--------------+      +-------------+
               |   Case       |      |   User      |
               |--------------|      |-------------|
               | CaseNumber   |      |id           |
               | ContactId    |      |OwnerId      |
               | IsClosed     |      |UserName     |
               +--------------+      +-------------+

ContactId是一个映射到OwnerId的外键(请注意两个表中的foo如何?)

  +-------------------------------------+        +----------------------------+
  |                     Case            |        |             User           |
  |-------------------------------------|        |----------------------------|
  |CaseNumber |  ContactId |  IsClosed  |        | id | OwnerId | UserName    |
  |                                     |        |                            |
  |1             foo          false     |        | 42   foo       bob         |
  |2             bar          true      |        | 99   bar       joe         |
  |3             foobar       false     |        | 10   foobar    sally       |
  |                                     |        |                            |
  +-------------------------------------+        +----------------------------+

我想展示案例和用户之间的关系。 (例如,鲍勃有案例1,乔有案例2等。)我认为这被称为Left Inner Join。如果我错了,请纠正我。

+-------------------------------------+
|                                     |
|  Case.CaseNumber | User.UserName    |
|                                     |
|     1               bob             |
|     2               joe             |
|     3               sally           |
|                                     |
+-------------------------------------+

以下是我认为SOQL查询应该的样子。

SELECT Case.CaseNumber, User.OwnerId
FROM Case
WHERE Case.ContactId IN (SELECT User.OwnerId FROM User)

我正在关注Salesfoce SOQL文档中的示例 http://wiki.developerforce.com/page/A_Deeper_look_at_SOQL_and_Relationship_Queries_on_Force.com

查询CaseNumber和UserName的正确语法是什么?

3 个答案:

答案 0 :(得分:2)

我不确定我是否在关注模式。但是,这个SOQL应该可以满足您的需求。

SELECT CaseNumber, Owner.Name FROM Case

这是一个更通用的链接,可以帮助编写像这样的查询

http://www.salesforce.com/us/developer/docs/soql_sosl/

答案 1 :(得分:1)

每个联系人案例:

List<Contact> contacts = [SELECT Id, LastName, (SELECT ID FROM Cases) FROM Contact];
System.debug(contacts[0].Cases);       //list of cases for first contact
if(contacts[0].Cases.isEmpty() == false)
{
      System.debug(contacts[0].Cases[0].CaseNumber);  //case number of first case of first contact
}

每位用户案例:

List<User> users = [SELECT Id, LastName, (SELECT ID FROM Cases) FROM User];
System.debug(users[0].Cases);    //list of cases for the first user
if(users[0].Cases.isEmpty() == false)
{
     System.debug(users[0].Cases[0].CaseNumber);  //case number of first case for first user
}

其他查询: 仅限已打开案例的联系人

List<Contact> contacts = [SELECT Id, LastName, (SELECT ID FROM Cases WHERE CloseDate = null) FROM Contact WHERE Id IN (SELECT ContactId FROM Cases WHERE CloseDate = null)];

我希望有帮助

答案 2 :(得分:0)

我看到他们都准备好了帮助你,但我还想添加一些东西......

您始终可以使用:workbench site

https://workbench.developerforce.com/login.php?startUrl=%2Fquery.php

或force.com来测试您的查询