【问题标题】:How do I make a select query for 2 tables in SOQL?如何在 SOQL 中对 2 个表进行选择查询?
【发布时间】:2020-03-07 16:51:21
【问题描述】:

我正在为此苦苦挣扎并不断出错。 我正在尝试做:

SELECT
 table1.col1, table1.col2,
 table2.col1
FROM
  table1, table2
WHERE
 table1.col1 = table2.col2

我试过了:

SELECT 
BMCServiceDesk__Incident__c.BMCServiceDesk__Category_ID__c,
(SELECT User.department FROM User)
FROM
BMCServiceDesk__Incident__c
WHERE
BMCServiceDesk__Incident__c.BMCServiceDesk__clientEmail__c IN (SELECT User.email FROM User)

但是得到了:

在查询调用的 FROM 部分中不理解关系“用户”。如果您尝试使用自定义关系,请务必在自定义关系名称后附加“__r”。请参考您的 WSDL 或相应名称的描述调用

【问题讨论】:

  • 您好,您是要查询标准对象还是自定义对象?对象是如何关联的?我知道您可能不想分享实际的对象名称,但您提供的代码信息不足。
  • @TechingCrewMatt 它实际上是一个标准名称......将用户表数据与事件数据链接
  • 能否提供实际查询?

标签: sql salesforce soql


【解决方案1】:

感谢您发布查询。最外层 SELECT 子句中的子查询需要引用关系。例如,您可以对 Account 和 Contact 对象执行以下操作,以获取所有 Accounts 的子联系人列表:

SELECT Id, (SELECT Id FROM Contacts) FROM Account

我认为您不会向 User 对象添加自定义关系,因此子查询在您的情况下不起作用。如果您对 BMCServiceDesk__Incident__c 上的 User 对象进行了自定义查找,则可以按如下方式遍历父关系:

SELECT Id, User__r.Department FROM BMCServiceDesk__Incident__c

如果没有自定义关系,我认为您无法在 SOQL 中尝试进行内部连接。您可能需要类似于以下的代码来实现它:

List<String> userEmails = new List<String>();
for(User user : [SELECT Id, Email FROM User WHERE IsActive = TRUE]){
    userEmails.add(user.Email);
}
List<BMCServiceDesk__Incident__c> incidents = new List<BMCServiceDesk__Incident__c>([
    SELECT  Id, BMCServiceDesk__Category_ID__c
    FROM    BMCServiceDesk__Incident__c
    WHERE   BMCServiceDesk__clientEmail__c IN :userEmails
]);
System.debug(incidents);

如果这是您经常需要的东西,那么创建一个 Visualforce 页面或 Lightning 组件来显示结果可能是有意义的。如果电子邮件属于有效用户,您还可以向 BMCServiceDesk__Incident__c 对象添加触发器以填充存储用户 ID 的新字段。这样,您就可以使用标准报告来显示结果。

【讨论】:

    【解决方案2】:

    如果两个表共享同一列,也许可以看看它们的内部联接。

    SELECT
        table1.col1, table1.col2,
        table2.col1
    FROM
        table1
    INNER JOIN
       table2 ON table1.col1 = table2.col1;
    

    我不确定您给出的表格之间的关系是什么,但可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      相关资源
      最近更新 更多