EDIT: Более простой пример. (Раньше название: Oracle Column Injection)
Oracle Dynamic Join Challenge
ЦЕЛЬ: Заполните полученный запрос, чтобы произвести следующие результаты?
ЦЕЛЬ: Создайте столбец в зависимости от существующего столбца таблицы, не помещая таблицу в подзапрос.
Правила:
- Реструктуризация запроса поставить
tbl
в подзапрос не вариант. - Запрос должен использовать
a,b->1; x->2; y->3
, а не просто присоединяться к1,1,2,1,3
. - Подзапрос
tbl
не может быть изменен.
SELECT val, cat
FROM (SELECT 'a' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'x' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'y' val FROM DUAL) tbl
... JOIN (...) ON ...
val | cat
-----+-----
'a' | 1
'b' | 1
'x' | 2
'b' | 1
'y' | 3
Ну, я получил это далеко (ниже), но я не могу добавить второй LEFT JOIN.
SELECT val, cat
FROM (SELECT 'a' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'x' val FROM DUAL UNION ALL
SELECT 'b' val FROM DUAL UNION ALL
SELECT 'y' val FROM DUAL) tbl
LEFT JOIN (SELECT 1 cat FROM DUAL) ON val in ('a','b')
val | cat
-----+-----
'a' | 1
'b' | 1
'x' |
'b' | 1
'y' |
Упс ... исправлено основное сообщение. – Steven
Ты почти там. Я бы предпочел решение, в котором я могу поместить членов одного и того же 'cat' в список, потому что в моем фактическом примере список' val' в 'cat' составляет около 30. – Steven
Почему бы вам не создать фактическая таблица, которая отображает значения в категории и присоединяется к этому? –