РЕДАКТИРОВАТЬ: Пример гораздо проще. (Ранее называлось: «Внедрение в колонку Oracle»)
ЦЕЛЬ: Завершить запрос ниже, чтобы получить следующие результаты?
ЦЕЛЬ: Создать столбец, зависящий от существующего столбца в таблице, без помещения таблицы в подзапрос.
Правила:
- Перестройка запроса для помещения
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
Хорошо, я зашел так далеко (ниже), но я не могу добавить второе левое соединение.
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' |