2009-03-11 3 views
0

У меня есть две таблицы в базе данных оракула, которые имеют одинаковые имена и типы столбцов. Например:Таблицы Oracle в одном представлении

Table1: ид, имя, комментарий
Table2: идентификатор, имя, комментарий

Как я могу показать все данные как таблицы в одном окне?

ответ

0

Почему две идентичные таблицы? Что случилось с «Не повторяй себя»? Извините, звучит как плохой запах дизайна для меня.

Независимо от того, какая разница вдохновила вас на создание двух таблиц, я бы поспорил, что это действительно может быть другим атрибутом, чтобы отличить две группы в одной таблице.

+0

это старое приложение, что я не хочу менять. Я извлекаю удаленные элементы из таблицы с помощью триггера и помещаю его в свою новую таблицу. после этого я делаю некоторые статистические вещи с текущими элементами и «удаленными». – ddejmek

+0

Ваш выбор, конечно, но мы говорим об одном ALTER, чтобы добавить столбец в таблицу, а также сопровождающий триггер и другие системные изменения. – duffymo

+0

Еще один SO'er, одержимый очищением мира вместо того, чтобы просто ответить на вопрос. Зачем предполагать, что * HE * сделал таблицы? Зачем предположить, что он ДОЛЖЕН * делать DDL? – 2009-03-11 20:27:02

2

Если вы хотите использовать 4 отдельных столбца, просто используйте псевдонимы, как и любой другой.

create or replace view vw_my_view as 
    select t1.id t1_id 
     ,t1.comment t1_comment 
     ,t2.id t2_id 
     ,t2.comment t2_comment 
    from table1 t1 
    inner join table2 t2 on join condition 
    where filter conditions 

EDIT Конечно, ваши таблицы будут связаны друг с другом в некотором роде, в противном случае нет никакого способа для одной строки вашего зрения, чтобы означать что угодно. Таким образом, вы будете иметь условие соединения, чтобы объединить эти две таблицы, такие как t1.id = t2.id

Если вы хотите их в две колонки, используйте Union

create or replace view vw_my_view as 
    select id 
     ,comment 
    from table1 
    union all    -- use ALL unless you want to lose rows 
    select id 
     ,comment 
    from table2; 
+0

Вы понимаете, что в первом ответе вы получите t1 x t2 полные строки на выходе. Вы получите МНОГО больше строк, чем вы рассчитывали. – 2009-03-11 20:25:25

0

SELECT * FROM table1 UNION SELECT * оТ TABLE2

(или UNION ALL, если вы хотите дубликаты)

+0

Люди обычно не ХОТЯТ дубликаты, но они хотят, чтобы каждая строка дублировалась или нет. В подобных случаях две таблицы почти всегда взаимоисключающие, поэтому UNION и UNION ALL будут давать одинаковые ответы, но у них будет БОЛЬШЕ более высокая стоимость. Всегда выбирайте дешевый выбор по умолчанию и блуждающий. – 2009-03-11 20:31:08

0

Я согласен с тем, что duffymo говорит, но если есть хорошая причина для этого то UNION сделает это за вас. например

SELECT id, name, comment FROM Table1 
UNION 
SELECT id, name, comment FROM Table2 
+0

UNION почти никогда не хочет того, чего хотят люди, и он выдает ненужный вид. – 2009-03-11 20:28:53

0
select * from table1 
union 
select * from table2; 
+0

UNION почти никогда не хочет того, чего хотят люди, и он вызывает ненужный вид. – 2009-03-11 20:28:23

Смежные вопросы