У меня есть 3 таблицы, одна из которых представляет «супертип», со столбцом идентификатора. Две другие таблицы - это подтипы, со столбцом идентификатора, который является внешним ключом для таблицы супертипа, плюс столбец, специфичный для подтипа.
Мне нужен запрос, который возвращает все данные, а также столбец, который я могу использовать в качестве дискриминатора, который сообщает мне, из какой таблицы получена строка.
Так, например, как я могу изменить это:
SELECT * from SUPER S
left outer join SUB_1 S1 on S.ID = S1.ID
left outer join SUB_2 S2 on S.ID = S2.ID
Что возвращает мне это:
ID SUB_COL_1 SUB_COL_2
==== ========= =========
0001 value x NULL
0002 value y NULL
0003 NULL value z
Во что-то, что добавит столбец дискриминатора с некоторыми жестко закодированными литеральными значениями, например:
ID DISCRIMINATOR SUB_COL_1 SUB_COL_2
==== ============= ========= =========
0001 SUBTYPE_1 value x NULL
0002 SUBTYPE_1 value y NULL
0003 SUBTYPE_2 NULL value z
Мне не разрешается каким-либо образом изменять модель данных. Я также не могу выполнить какую-либо постобработку путем программного тестирования NULLS после факта. Мне нужно работать с таблицами, как есть, и производить точный набор результатов, показанный выше. Я использую Oracle 11g, если это как-то повлияет на ответ.