Можем ли мы иметь условное объединение в представлении в Oracle? - PullRequest
0 голосов
/ 02 апреля 2019

Я создал VIEW, который выбирает данные из таблиц, используя UNION. Я хочу знать, могу ли я выбрать таблицы для объединения в зависимости от условий.

Если tableA.ColA = 1, выберите ColA из таблицы A Union, выберите ColB из таблицы B еще выберите ColA из таблицы A Union выберите ColC из таблицы C

1 Ответ

1 голос
/ 02 апреля 2019

Похоже, что вы можете захотеть что-то подобное, когда есть две ветви запроса, из которых гарантированно не будут возвращаться данные из-за несовместимых друг с другом предикатов.

select b.*
  from (select ColA from tableA 
        Union 
        select ColB from tableB) b
 where exists( select 1
                 from tableA
                where colA = 1 )
union all
select c.*
  from (select ColA from tableA 
        Union 
        select ColC from tableC) c
 where not exists( select 1
                     from tableA
                    where colA = 1 )

С практической точки зрения, однако, я склонен ставить под сомнение любую модель данных, которая включает в себя подобные вещи. Если вам регулярно требуется объединять данные из разных таблиц, это обычно означает, что ваша модель данных неверна. Например, вам может понадобиться дополнительная сущность, которая является родительской для A, B и C. Или вы можете объединить A, B и C в одну сущность со столбцом типа, который указывает, является ли строка буквой A, B или C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...