web-dev-qa-db-fra.com

Données de deux tables dans une seule vue

Est-il possible de récupérer des données de deux tables (qui ont les mêmes champs) dans une seule vue. Fondamentalement, la vue voit les données comme s'il s'agissait d'une seule table.

16
Marcin

Oui, en utilisant un UNION -

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

... nécessite qu'il y ait le même nombre de colonnes et que les types de données correspondent à chaque position.

..de préférence, en utilisant un JOIN:

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

Mais je tiens à vous mettre en garde en fonction des vues - si elles ne sont pas matérialisées, ce ne sont que des instructions SQL préparées. Il n'y a aucun avantage en termes de performances et peut avoir un impact négatif sur les performances si vous créez une vue basée sur une 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.

27
OMG Ponies
create or replace view view_name as
select * from table_1
union all select * from table_2

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

Si vous souhaitez que les lignes en double soient regroupées en 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

Généralement, c'est une mauvaise forme d'utiliser * dans la liste de sélection, mais en supposant que les requêtes utilisant la vue vont choisir exactement ce dont elles ont besoin, je l'utiliserais ici au lieu de nommer explicitement toutes les colonnes. (Surtout que je ne voudrais pas avoir à ajouter les noms des colonnes lorsque table_1 et table_2 changent.)

1
Shannon Severance