2010-07-16 9 views

Répondre

19

Oui, en utilisant un UNION -

CREATE VIEW vw_combined AS 
    SELECT * FROM TABLE1 
    UNION ALL 
    SELECT * FROM TABLE2 

... exige qu'il y ait le même nombre de colonnes et les types de données correspondance à chaque position.

..preferrably, en utilisant JOIN:

CREATE VIEW vw_combined AS 
    SELECT * 
    FROM TABLE1 t1 
    JOIN TABLE2 t2 ON t2.col = t1.col 

Mais je veux mettre en garde contre selon les points de vue - sinon matérialisé, ils ne sont préparés instructions SQL. Il n'y a aucun avantage de performance, et peut avoir un impact négatif sur les performances si vous construisez une vue basée sur un autre. De plus, les vues sont fragiles - elles peuvent changer, et vous ne saurez pas avant d'utiliser une vue de support s'il y a des problèmes.

+3

"de préférence, en utilisant un JOIN" Seulement si cela répond aux exigences. Je n'ai pas vu d'implication que les lignes de table1 et table2 étaient liées de la façon dont une jointure aurait du sens. OP a déclaré: «qui ont les mêmes champs», de sorte que le syndicat fonctionnerait si les types correspondent. –

+1

@ Shannon Severance: Je ne vois pas le mal à suggérer un examen de la logique, ou de donner des informations supplémentaires qui pourraient être utiles. –

+4

Je suis d'accord qu'il était bon de mentionner la jointure, car il existe deux façons de combiner deux tables rendant les résultats plus longs ou plus larges que les tables par elles-mêmes. (+1 pour ce BTW.) Je ne pense pas que l'un est préférable à l'autre sans savoir avec certitude ce que OP essaie de faire. –

1
create or replace view view_name as 
select * from table_1 
union all select * from table_2 

Note: Les colonnes de la vue sont définies au moment où la vue est créée. L'ajout de colonnes à table_1 et table_2 après la création de la vue n'apparaîtra pas dans view_name. Vous devrez réexécuter le DDL ci-dessus pour afficher de nouvelles colonnes.

Si vous souhaitez dupliquer les lignes à collasped aux lignes simples (mais potentiellement plus de travail pour le serveur):

create or replace view view_name as 
select * from table_1 
union select * from table_2 

En général, il est mauvaise forme à utiliser * dans la liste de sélection, mais en supposant que les requêtes utiliser la vue va choisir ce dont ils ont besoin, je l'utiliserais ici au lieu de nommer explicitement toutes les colonnes. (D'autant plus que je ne voudrais pas avoir à ajouter les noms de colonne lorsque table_1 et table_2 changent.)

+0

+1: J'ai oublié de mentionner les colonnes à la création –

+0

@OMG Ponies: Ça m'est arrivé récemment, c'est frais dans les banques de mémoire. –

Questions connexes