如何在 SOQL 中对 2 个表进行 select 查询?

How do I make a select query for 2 tables in SOQL?

我正在为此苦苦挣扎,并且不断收到错误。 我正在尝试做:

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)

但是得到了:

Didn't understand relationship 'User' in FROM part of query call. If you are attempting to use a custom relationship, be sure to append the '__r' after the custom relationship name. Please reference your WSDL or the describe call for the appropriate names

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

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

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

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

SELECT Id, (SELECT Id FROM Contacts) FROM Account

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

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 的新字段。这样,您就可以使用标准报告来显示结果。