En postgreSQL, je crée une table my_table
:Comment créer une vue depuis un autre?
DROP SCHEMA IF EXISTS roipoussiere cascade;
CREATE SCHEMA roipoussiere;
CREATE TABLE roipoussiere.my_table (
id SERIAL PRIMARY KEY,
x smallint,
y smallint);
INSERT INTO roipoussiere.my_table(x, y) VALUES (42, 42);
-- [etc.]
... à partir de laquelle j'ai créé des vues view_a
et view_b
, qui ont à la fois les mêmes colonnes (mais contenu différent):
DROP VIEW IF EXISTS roipoussiere.view_a CASCADE;
CREATE VIEW roipoussiere.view_a AS SELECT
concat_ws('view_a_', x, '_', y) AS foo,
'Hello' AS bar,
x,
y
FROM roipoussiere.my_table;
DROP VIEW IF EXISTS roipoussiere.view_b CASCADE;
CREATE VIEW roipoussiere.view_b AS SELECT
concat_ws('view_b_', x, '_', y) AS foo,
'Hello' AS bar,
x,
y
FROM roipoussiere.my_table;
. .. alors j'ai créé la vue my_view
, union de view_a
et view_b
:
DROP VIEW IF EXISTS roipoussiere.my_view CASCADE;
CREATE VIEW roipoussiere.my_view AS
SELECT * FROM roipoussiere.view_a UNION ALL
SELECT * FROM roipoussiere.view_b;
Mais view_a
et view_b
ont beaucoup de contenu en commun, seulement quelques colonnes sont différentes. Donc, je voudrais éviter la redondance et créer view_a
, puis créer view_b
deview_a
(sans créer la colonne bar
deux fois, ce qui est identique pour toutes les vues).
Note: il est un exemple simplifié, dans la pratique:
- il y a 4 vues, pas 2; Il existe peu d'autres colonnes comme
foo
; - dizaines d'autres colonnes comme
bar
(avec des données codées en dur) sur chaque vue.
Êtes-vous à la recherche de 'view view view_b en tant que select ... from view_a'? –
A l'intérieur de '...', dois-je écrire tous les noms de colonnes? – roipoussiere
Si vous ne voulez pas écrire tous les noms de colonne, utilisez 'select *' –