Запрос тикетов с услугами

Приветствую.
Можете подкинуть идею как правильно составить запрос, чтобы получить в одном запросе все тикеты (UserRequest, Incident) с полями услуг и подкатегорий услуг.
Если делаю oql запрос: SELECT UserRequest
то могу экспортировать поля
org_name,ref,service_name,servicesubcategory_name,description,urgency,start_date,close_date,caller_id_friendlyname,agent_id_friendlyname,operational_status
но если пробую SELECT Ticket
то нет полей service_name,servicesubcategory_name,urgency это логично, у класса Ticket нет таких атрибутов, и игрался с запросами, пробовал через JOIN или UNION
SELECT Ticket AS t JOIN UserRequest AS u ON u.id=t.id
SELECT UserRequest UNION SELECT Incident
через union всё равно не получает поля service_name.
Как правильно через join писать условие в oql запросе?
Спасибо.
И с новом годом наступившим.

JOIN Вам не поможет, потому что в результате Вы получите смесь разных сущностей в одной строке.
В случае с юнион, попробуйте поменять порядок таблиц, возможно OQL движок использует поля первой таблицы, и “лишние” поля остальных таблиц просто игнорирует.

1 лайк

SELECT Incident UNION SELECT UserRequest
В Incedent есть поле service_name , а в UserRequest - нет

1 лайк

Спасибо.
Попробовал, SELECT Incident UNION SELECT UserRequest
в оценке запросов проверяю выдаёт все тикеты. Добавляю такое выражение в запрос в книге запросов, и по ссылке пробую получить таблицу, выдаёт ошибку Error: Wrong field specification 'service_name': Unknown attribute service_name from class Ticket
Проверил по модели данных, в обоих классах UserRequest и Incident, есть атрибут service_name и servicesubcategory_name.
Вот отдельно если сделать запросы из этих классов, то поля все экспортируются
отдельно SELECT UserRequest и отдельно SELECT Incident, а через UNION ошибка, видимо система думает, что я запрос SELECT Incident UNION SELECT UserRequest это аналог SELECT Ticket

На самом деле смешивать различные сущности в одном запросе - не очень хорошая идея, тем более что дочерние имеют собственные поля.
Но, судя по документации - действительно в синтаксисе UNION будет возвращени минимальный общий предок ( the lowest common ancestor )

https://www.itophub.io/wiki/page?id=2_5_0%3Aoql%3Aoql_examples#opened_tickets

Как вариант - можно поробовать добавить Класс UserTicket, который будет дочерним для Ticket и предком для Incident и UserRequest , но насколько обосновано такое решение и действительно ли нельзя обойтись двумя запросами - неясно.
С друго стороны, если совместить Join и Union , то можно будет хотя бы фильтровать результаты, например для выбора Incident и UserRequest, принадлежащим одному сервису.

2 лайка

Спасибо. Теперь понял.
Если так пока в этом вопросе нельзя объединить, то могу сделать два запроса для экспорта и по обоим экспортировать данные в excel.
Можно ли в excel скажем incident выгружать на 1 лист, userrequest на 2 лист, а потом эти данные собирать на 3 листе с небольшим форматированием, не показывая какие то стобцы.
Когда в excel выгружаю данные, там дата и время в 2 столбца падают, в принципе можно время просто опустить и никуда не выбирать.

Может будет полезно: