Добавление нового столбца в запросе SQL для отображения, содержит ли запись дочерний элемент или нет - PullRequest
0 голосов
/ 16 января 2019

Требуется отобразить записи действий (таблица S_EVT_ACT) вместе с новым столбцом в нем, чтобы показать, содержит ли запись действий какие-либо вложения или нет. Вложения активности принадлежат таблице S_ACTIVTY_ATT и связаны с родительской активностью как PAR_ROW_ID вложения = ROW_ID действия.

Новый столбец может отображать выходные данные в виде Y или N для каждой записи активности. Кроме того, новый столбец может отображать количество вложений для действия.

каким должен быть запрос SQL в этом случае.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Использование exists:

select a.*,
       (case when exists (select 1
                          from S_ACTIVTY_ATT att
                          where att.PAR_ROW_ID = a.ROW_ID
                         )
             then 'Y' else 'N'
        end) as has_attachment
from S_EVT_ACT a;

Как правило, exists работает лучше, чем любое решение с агрегацией. В частности, с индексом на att(PAR_ROW_ID) это должно быть довольно быстро.

0 голосов
/ 16 января 2019

Если вы действительно хотите иметь столбец, вы должны заполнять (увеличивать) значение каждый раз, когда вставляете вложение. Если вы хотите видеть это только в SELECT-Query, вы можете сделать что-то вроде этого:

SELECT act.*, att.ATT_COUNT 
FROM S_EVT_ACT act
    LEFT OUTER JOIN (SELECT PAR_ROW_ID, COUNT(*) AS ATT_COUNT
        FROM S_ACTIVTY_ATT 
        GROUP BY PAR_ROW_ID ) AS att ON (act.ROW_ID = att.PAR_ROW_ID)

Обратите внимание: это должно работать, но в зависимости от количества строк и других вещей, которые я не знаю, могут быть лучшие решения.

...