È possibile acquisire dati da due tabelle (che hanno gli stessi campi) in un'unica vista. Fondamentalmente, quindi la vista vede i dati come se fosse una tabella.Dati da due tabelle in una vista
risposta
Sì, utilizzando un UNION -
CREATE VIEW vw_combined AS
SELECT * FROM TABLE1
UNION ALL
SELECT * FROM TABLE2
... richiede che ci sia lo stesso numero di colonne, e la partita tipi di dati in ogni posizione.
..preferrably, utilizzando un JOIN:
CREATE VIEW vw_combined AS
SELECT *
FROM TABLE1 t1
JOIN TABLE2 t2 ON t2.col = t1.col
Ma voglio mettere in guardia contro seconda vista - se non materializzato, essi sono preparati solo le istruzioni SQL. Non c'è alcun vantaggio in termini di prestazioni e può influire negativamente sulle prestazioni se si crea una vista basata su un'altra. Inoltre, le visualizzazioni sono fragili: possono cambiare e non si sa fino a quando non si utilizza una vista di supporto in caso di problemi.
create or replace view view_name as
select * from table_1
union all select * from table_2
Nota: Le colonne nella vista vengono impostati al momento della creazione della vista. L'aggiunta di colonne a table_1 e table_2 dopo la creazione della vista non verrà visualizzata in view_name. Sarà necessario rieseguire il DDL precedente per ottenere nuove colonne da mostrare.
Se si vuole duplicare le righe da collasped alle singole righe (ma potenzialmente più lavoro per il server):
create or replace view view_name as
select * from table_1
union select * from table_2
Generalmente è cattiva forma da utilizzare *
nella lista di selezione, ma partendo dal presupposto che le query utilizzando la vista si sceglierà solo ciò di cui hanno bisogno, lo userei qui invece di nominare esplicitamente tutte le colonne. (Soprattutto perché non vorrei aggiungere i nomi delle colonne quando table_1 e table_2 cambiano.)
+1: ho dimenticato di menzionare le colonne alla creazione –
@OMG Ponies: Mi ha morso di recente, è fresco nelle banche della memoria. –
"preferibilmente, utilizzando un JOIN" Solo se soddisfa i requisiti. Non ho visto un'implicazione che le righe in table1 e table2 fossero correlate nel modo in cui un join avrebbe senso. OP ha dichiarato: "che hanno gli stessi campi" quindi il sindacato funzionerebbe se i tipi combaciassero. –
@ Severing Severing: non vedo il danno nel suggerire una revisione della logica o fornire informazioni aggiuntive che potrebbero essere utili. –
Sono d'accordo che è stato utile menzionare il join, perché ci sono due modi per combinare due tabelle, rendendo i risultati più lunghi o più lunghi delle tabelle da soli. (+1 per quella BTW.) Semplicemente non penso che uno sia preferibile all'altro senza sapere per certo quale OP sta provando a fare. –