Как сделать запрос на выборку для 2 таблиц в SOQL? - PullRequest
0 голосов
/ 07 марта 2020

Я борюсь с этим и продолжаю получать ошибки. Я пытаюсь сделать:

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)

Но получил:

Не понял отношения «Пользователь» в ОТ часть запроса запроса. Если вы пытаетесь использовать пользовательские отношения, обязательно добавьте '__r' после имени пользовательского отношения. Пожалуйста, укажите ваш WSDL или вызов описания для соответствующих имен

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Спасибо за публикацию запроса. Подзапрос в вашем крайнем предложении SELECT должен ссылаться на отношение. Например, вы можете сделать следующее для объектов Account и Contact, чтобы получить список дочерних контактов для всех учетных записей:

SELECT Id, (SELECT Id FROM Contacts) FROM Account

Я не думаю, что вы добавляете пользовательские отношения в объект User, чтобы подзапрос не будет работать в вашем случае. Если у вас есть пользовательский поиск объекта 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, чтобы заполнить новое поле, в котором хранится идентификатор пользователя, если электронная почта принадлежит действительному пользователю. Таким образом, вы можете использовать стандартную отчетность для отображения результатов.

0 голосов
/ 07 марта 2020

Может быть, взгляните на внутреннее объединение двух таблиц, если они совместно используют один и тот же столбец.

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

Я не совсем уверен, каковы отношения между таблицами, которые вы дали, но могут быть полезны.

...