Est-il possible d'extraire des données de deux tables (ayant les mêmes champs) dans une vue? Fondamentalement, donc la vue voit les données comme si c'était une table.Données provenant de deux tables dans une vue
Répondre
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.
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.)
+1: J'ai oublié de mentionner les colonnes à la création –
@OMG Ponies: Ça m'est arrivé récemment, c'est frais dans les banques de mémoire. –
"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. –
@ 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. –
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. –