У меня есть представление для отчетов, которое выглядит примерно так:
SELECT
a.id,
a.value1,
a.value2,
b.value1,
/* (+50 more such columns)*/
FROM a
JOIN b ON (b.id = a.b_id)
JOIN c ON (c.id = b.c_id)
LEFT JOIN d ON (d.id = b.d_id)
LEFT JOIN e ON (e.id = d.e_id)
/* (+10 more inner/left joins) */
Он объединяет довольно много таблиц и возвращает множество столбцов, но индексы на месте, и производительность в порядке.
Теперь я хочу добавить к результату еще один столбец, показывающий
- значения, разделенные запятыми
- упорядочены по значению
- из таблицы у
- внешнее соединение через таблицу пересечений x
- если
a.value3 IS NULL, иначе взятьa.value3
Чтобы разделить сгруппированные значения запятыми, я использую Бродяга Тома Кайта, можно использовать COLLECT позже.
Псевдокод для SELECT будет выглядеть так:
SELECT xx.id, COALESCE( a.value3, stragg( xx.val ) ) value3
FROM (
SELECT x.id, y.val
FROM x
WHERE x.a_id = a.id
JOIN y ON ( y.id = x.y_id )
ORDER BY y.val ASC
) xx
GROUP BY xx.id
Как лучше всего это сделать? Какие-нибудь советы?