Pergunta

Eu tenho quatro tabelas que contêm exatamente as mesmas colunas, e deseja criar uma vista sobre todos os quatro para que eu possa consultá-los juntos.

Isso é possível?

(por razões tediosas eu não posso / não me é permitido combiná-los, o que tornaria este irrelevante!)

Foi útil?

Solução

Assumindo que além de ter os mesmos nomes de colunas, colunas do mesmo contêm os mesmos dados, que pretende criar uma visão que é a união de todas essas tabelas.

Algo como o seguinte deve funcionar, mas o meu SQL está enferrujado:

(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));

Outras dicas

Pode ser interessante notar que você pode precisar usar "união all" para preservar linhas únicas que podem existir em mais de uma das mesas. Uma união padrão irá remover duplicatas.

É difícil dizer a partir de sua consulta se você espera que o dado a ser retornado com base em um UNION, ou como uma exibição que contém as colunas discretamente. Isto, obviamente, tem um efeito.

Considere o seguinte exemplo:

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

Agora, execute a seguinte consulta contra esta:

SELECIONAR ID, nome TableA UNION ALL Id, nome TableB UNION ALL Id, nome TableC UNION ALL Id, nome apresentadas

Isto resulta na seguinte saída:

1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate

É isso que você está depois? Se assim for, você usa uma consulta UNION.

Agora, se o efeito que você está depois é ter uma visão discreta de dados relacionados, você pode precisar de fazer algo como isto:

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

Isto irá resultar na seguinte vista dos dados:

MasterID  MasterName  BandID  BandName BlackAdderID BlackAdderName  BlackadderRealID  BlackadderRealName
1         John        2       George   1            Bob             1                 Kate
2         Paul        1       Ringo    1            Bob             1                 Kate

Use a declaração da União

select * from table1
union 
select * from table2
union
select * from table3

Você pode se você união deles (eu sugeriria incluindo um indicador de qual tabela de cada registro veio):

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..

Em vez de UNION, uso UNION ALL, a menos que você quer especificamente linhas duplicadas a ser excluído. UNIÃO em sua própria leva mais tempo para executar (por causa do tipo que faz para encontrar dupes), e remove as linhas duplicadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top