Вопрос

Редактировать: Гораздо более простой пример.(Ранее называвшийся:Внедрение столбца Oracle)

ЦЕЛЬ: Выполните приведенный ниже запрос, чтобы получить следующие результаты?

ЦЕЛЬ: Создайте столбец, зависящий от существующего столбца в таблице, не помещая таблицу в подзапрос.

Правила:

  1. Реструктурируйте запрос, чтобы поместить tbl в подзапросе это не вариант.
  2. Запрос должен использовать a,b->1; x->2; y->3, а не просто присоединиться к 1,1,2,1,3.
  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' |  
Это было полезно?

Решение

SELECT tbl.val, map.cat
  FROM (SELECT 'a' val FROM DUAL  UNION
        SELECT 'b' val FROM DUAL  UNION
        SELECT 'x' val FROM DUAL  UNION
        SELECT 'b' val FROM DUAL  UNION
        SELECT 'y' val FROM DUAL) tbl
   LEFT JOIN ( SELECT 'a' val, 1 cat FROM DUAL UNION
               SELECT 'b' val, 1 cat FROM DUAL UNION
               SELECT 'x' val, 2 cat FROM DUAL UNION
               SELECT 'y' val, 3 cat FROM DUAL ) map ON map.val = tbl.val

Из ваших примеров я подозреваю, что вы имеете в виду использовать UNION ALL вместо UNION (чтобы в результате появилось 2 строки для val = 'b').

Ваш пример "Я зашел так далеко" даже не выполняется так, как написано - для него нужны круглые скобки вокруг списка IN - и даже после того, как вы исправите это, он не выдает вывод, который вы показываете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top