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!)

È stato utile?

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 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top