Предложение WITH в запросе EA Sparx - PullRequest
0 голосов
/ 20 сентября 2018

Можно ли использовать предложения WITH в запросе EA Sparx?

Я написал это:

with Activities as

    (
    select t_connector.start_object_id as Object2_id, t_object.* from t_object 
        join t_connector on t_connector.end_object_id=t_object.Object_id
        where t_object.Object_type= 'Activity'

    union

    select t_connector.end_object_id as Object2_id, t_object.*  from t_object  
        join t_connector on t_connector.start_object_id=t_object.Object_id
        where t_object.Object_type= 'Activity'

    )

select * from

    (
    select obj.object_id, count(other.object_id) as 'Activities' from
        t_object obj left join Activities as other on obj.Object_id=other.Object2_id

    group by obj.object_id
    ) as ac 

where object_id in (143306, 143321, 143226, 143326)

, и он не возвращает ни строк, ни выдает никаких ошибок, в то время кактот же запрос с оператором WITH, вставленным в строку, возвращает ожидаемые результаты:

select * from
    (
    select obj.object_id, count(other.object_id) as 'Activities' from
        t_object obj left join 
            (
            select t_connector.start_object_id as Object2_id, t_object.* from t_object 
                join t_connector on t_connector.end_object_id=t_object.Object_id
                where t_object.Object_type= 'Activity'

            union

            select t_connector.end_object_id as Object2_id, t_object.*  from t_object  
                join t_connector on t_connector.start_object_id=t_object.Object_id
                where t_object.Object_type= 'Activity'

            )
        as other on obj.Object_id=other.Object2_id

    group by obj.object_id
    ) as ac 

where object_id in (143306, 143321, 143226, 143326)

Я знаю, что SQL-механизм EA немного сложен (например, запрос не может начинаться с комментария).

Есть ли здесь какие-то хитрости, чтобы позволить предложениям WITH работать в EA?

1 Ответ

0 голосов
/ 20 сентября 2018

Советник выполняет некоторые базовые проверки запросов.Одним из них является проверка того, что запрос начинается с ключевого слова select.

Так что нет никакого способа заставить советник выполнить поисковый запрос, начинающийся с чего-то другого, чем select.

Однако во многих случаях предложение WITH используется для выполнения рекурсивных запросов, например, для получения всех элементов в пакете и всех его подпакетов.
Для этого конкретного случая вы можете использовать макрос #Branch# который будет рекурсивно переведен в разделенный запятыми список идентификаторов пакетов выбранного пакета и всех его подпакетов.

...