2008-12-09 8 views
9

Tengo cuatro tablas que contienen exactamente las mismas columnas, y quiero crear una vista sobre las cuatro para poder consultarlas juntas.Ver en varias tablas que contienen las mismas columnas

¿Esto es posible?

(por razones tediosas no puedo/h No se permitirá la combinación de ellos, lo que haría que este irrelevante!)

+0

¿qué servidor de base de datos está utilizando? – ysth

+0

No estoy seguro de su configuración exacta, pero si tiene 4 tablas duplicadas que desea consultar con una unión, una sola tabla con una columna de tipo puede tener más sentido. A menos que, por supuesto, el sistema ya exista o haya otros factores. –

Respuesta

15

Suponiendo que además de tener los mismos nombres de columna, columnas de la misma contienen los mismos datos, que desea crear una vista que es la unión de todos aquellos mesas.

algo como lo siguiente debería funcionar, pero mi SQL es oxidado:

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

UNION se utiliza para combinar el resultado de múltiples instrucciones SELECT en un solo conjunto de resultados. –

2

utilizar la instrucción unión

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

Puedes si la unión ellos (yo sugeriría que incluye algún indicador en cuanto a qué mesa de cada registro viene):

select table1.column1, 1 as TableNumber 
from  table1 

union 

select table2.column1, 2 as TableNumber 
from  table2 

.. etc .. 
12

Puede valer la pena señalar que es posible que deba usar "union all" para conservar filas únicas que pueden existir en más de una de las tablas. Una unión estándar eliminará duplicados.

+0

Gracias - estaba tratando de ver por qué algunas de las filas estaban siendo omitidas. Este es un buen punto. –

2

En lugar de UNION, use UNION ALL, a menos que desee específicamente que se excluyan filas duplicadas. UNION en sí mismo tarda más tiempo en ejecutarse (debido a la clase que lo hace para encontrar duplicados) y elimina las filas duplicadas.

8

Es difícil determinar a partir de su consulta si espera que los datos se devuelvan basándose en un UNION o en una vista que contenga las columnas discretamente. Esto obviamente tiene un efecto.

Considere el siguiente ejemplo:

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 

Ahora, ejecute la siguiente consulta en esto:

SELECT ID, Nombre de la Tabla A UNION ALL SELECT ID, nombre TableB UNION ALL SELECT ID, Nombre FROM TableC UNION ALL SELECCIONE ID, Nombre FROM TableD

Resultado s en la siguiente salida:

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

Esto es lo que buscas? Si es así, usa una consulta UNION.

Ahora, si el efecto deseado es tener una visión diferenciada de datos relacionados, puede que tenga que hacer algo como esto:

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 

Esto dará lugar a la siguiente vista de los datos:

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