Visualizza su più tabelle contenenti le stesse colonne
Domanda
Ho quattro tabelle contenenti esattamente le stesse colonne e desidero creare una vista su tutte e quattro in modo da poterle interrogare insieme.
È possibile?
(per motivi noiosi non posso / non posso combinarli, il che renderebbe questo irrilevante!)
Soluzione
Supponendo che oltre ad avere gli stessi nomi di colonna, le colonne dello stesso contengano gli stessi dati, si desidera creare una vista che sia l'unione di tutte quelle tabelle.
Qualcosa di simile al seguente dovrebbe funzionare, ma il mio SQL è arrugginito:
(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
Altri suggerimenti
Potrebbe valere la pena notare che potrebbe essere necessario utilizzare " union all " per conservare righe univoche che possono esistere in più di una delle tabelle. Un'unione standard rimuoverà i duplicati.
È difficile stabilire dalla query se si prevede che i dati vengano restituiti in base a UNION o in una vista che contiene discretamente le colonne. Questo ovviamente ha un effetto.
Considera il seguente esempio:
TableA
ID Name RelatedID
1 John 2
2 Paul 1
TableB
ID Name RelatedID
1 Ringo 1
2 George 1
TableC
ID Name RelatedID
1 Bob 1
TableD
ID Name RelatedID
1 Kate NULL
Ora, esegui la seguente query su questo:
SELEZIONA ID, Nome DA TabellaA UNION ALL SELEZIONA ID, Nome DA TabellaB UNION ALL SELEZIONA ID, Nome DA TabellaC UNION ALL SELEZIONA ID, Nome DA TableD
Ciò si traduce nel seguente output:
1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate
È questo ciò che cerchi? In tal caso, si utilizza una query UNION.
Ora, se l'effetto che stai cercando è avere una visione discreta dei dati correlati, potresti dover fare qualcosa del genere:
SELECT A.ID MasterID, A.Name MasterName,
B.ID BandID, B.Name BandName,
C.ID BlackadderID, C.Name BlackadderName
D.ID BlackadderRealID, D.Name BlackadderRealName
FROM
TableA A
INNER JOIN
TableB B
ON
A.RelatedID = B.ID
INNER JOIN
TableC C
ON
B.RelatedID = C.ID
INNER JOIN
TableD D
ON
C.RelatedID = D.ID
Ciò comporterà la seguente visualizzazione dei dati:
MasterID MasterName BandID BandName BlackAdderID BlackAdderName BlackadderRealID BlackadderRealName
1 John 2 George 1 Bob 1 Kate
2 Paul 1 Ringo 1 Bob 1 Kate
Usa unione. Ecco la spiegazione
Usa la dichiarazione del sindacato
select * from table1
union
select * from table2
union
select * from table3
Puoi se li unisci (suggerirei di includere alcuni indicatori su quale tabella provenga ogni record):
select table1.column1, 1 as TableNumber
from table1
union
select table2.column1, 2 as TableNumber
from table2
.. etc ..
Invece di UNION, usa UNION ALL, a meno che tu non voglia specificamente escludere le righe duplicate. L'unione da sola richiede più tempo per l'esecuzione (a causa del tipo che fa per trovare i duplicati) e rimuove le righe duplicate.