Одна возможность, как упомянуто в комментариях, состоит в том, чтобы использовать опцию PIVOT в SELECT. Мне не ясно, что вас беспокоит по этому поводу - вы просто говорите, что хотите сами определить фактические имена столбцов? Вы можете легко создать псевдоним столбцов после операции PIVOT.
До существования PIVOT использовался стандартный метод, который я использовал и видел, как другие использовали для достижения sh, это было так:
SELECT obj_id,
MAX(CASE WHEN attr_id = 1 THEN value ELSE NULL) AS attr_1,
MAX(CASE WHEN attr_id = 2 THEN value ELSE NULL) aS attr_2,
... etc. ...
FROM attributes
GROUP BY obj_id
Для полный запрос, вы можете поместить этот подзапрос в CTE и присоединить его к objects
.
. Обратите внимание, это не обязательно означает, что Oracle выполнит весь подзапрос перед выполнением объединения. В вашем случае, возможно, так как я предполагаю, что каждая строка в objects
имеет соответствующие строки в attributes
. Но если в запросе был установлен фильтр obj_id
, он может сначала выполнить фильтрацию, а затем выполнить группировку. В любом случае, я бы определенно ожидал, что это будет более эффективно, чем многократное присоединение.