2009-03-11 12 views
0

Ich habe 2 Tabellen in einer Oracle-Datenbank, die die gleichen Spaltennamen und -typen hat. Zum Beispiel:Oracle-Tabellen in einer Ansicht

Tabelle 1: ID, Name, Kommentar
Table2: ID, Name, Kommentar

Wie kann ich alle Daten aus beiden Tabelle zeigen in einer Ansicht?

Antwort

0

Warum zwei identische Tabellen? Was ist mit "Do not Repeat Yourself" passiert? Entschuldigung, klingt für mich wie ein schlechter Design-Geruch.

Welcher Unterschied Sie inspiriert, zwei Tabellen zu erstellen, ich wette, es könnte wirklich ein anderes Attribut sein, um zwei Gruppen in einer Tabelle zu unterscheiden.

+0

es ist eine alte Anwendung, die ich nicht ändern wollen. Ich hole gelöschte Gegenstände aus einer Tabelle mit einem Auslöser und lege sie in meine neue Tabelle. Danach mache ich einige statistische Dinge mit den aktuellen Elementen und den "gelöschten". – ddejmek

+0

Ihre Wahl natürlich, aber wir sprechen über einen einzelnen ALTER, um eine Spalte zu einer Tabelle hinzuzufügen, plus den begleitenden Trigger und andere Systemänderungen. – duffymo

+0

Noch ein SO'er, besessen davon, die Welt aufzuräumen, anstatt einfach die Frage zu beantworten. Warum angenommen * HE * hat die Tische gemacht? Warum angenommen, er hat * ALLOWED * DDL zu machen? –

2

Wenn Sie 4 separate Spalten möchten, verwenden Sie einfach Aliase, wie Sie andere auswählen würden.

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 Natürlich werden Ihre Tabellen miteinander in irgendeiner Weise betreffen, sonst gibt es keine Möglichkeit für eine einzelne Zeile Ihrer Ansicht alles bedeuten soll. Sie werden daher eine Join-Bedingung haben die beiden Tabellen, wie t1.id = t2.id

Wenn Sie wollen, dass sie in zwei Spalten zu verbinden, 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

Sie erkennen, dass Sie in der ersten Antwort t1 x t2 insgesamt Zeilen in der Ausgabe erhalten. Sie werden viel mehr Reihen bekommen, als Sie erwartet haben. –

0

SELECT * FROM TABLE1 UNION SELECT * VON TABLE2

(oder UNION ALL, wenn Sie Duplikate)

+0

Die Leute wollen normalerweise keine Duplikate, aber sie wollen, dass jede Zeile dupliziert wird oder nicht. In Fällen wie diesen schließen sich die beiden Tabellen fast immer gegenseitig aus, daher geben UNION und UNION ALL identische Antworten, aber einer wird viel höhere Kosten haben. Wählen Sie immer die billige Wahl standardmäßig und streunenden. –

0

ich stimme mit dem, was duffymo sagt, aber wenn es einen guten Grund dafür ist dann ein UNION wird es für Sie tun. z.B.

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

UNION ist fast nie was die Leute wollen und es zwingt eine unnötige Art. –

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

UNION ist fast nie was die Leute wollen und es erzwingt eine unnötige Art. –

Verwandte Themen