2012-07-23 5 views
5

Quiero crear una vista con unión de tres tablas. Pero en la consulta resultante quiero una columna adicional como 'tableId'.Agregar columna adicional para ver, que no está presente en la tabla

Mi código es como

CREATE OR REPLACE VIEW DETAILS 
AS SELECT 
* FROM 
(
SELECT 
    T1.ID, 
    T1.AMOUNT, 
    T1.STATUS, 
    T1.ADDEDBY, 
    T1.ADDEDON 
FROM Table1 T1 
UNION ALL 
SELECT 
    T2.ID, 
    T2.AMOUNT, 
    T2.STATUS, 
    T2.ADDEDBY, 
    T2.ADDEDON 
FROM Table2 T2 
UNION ALL 
SELECT 
    T3.ID, 
    T3.BILLAMOUNT, 
    T3.STATUS, 
    T3.ADDEDBY, 
    T3.ADDEDON 
FROM Table3 T3 
); 

Esto me da requeridos unión de tres tablas. Pero, ¿cómo puedo obtener la columna Id de la tabla en la salida resultante? Esta columna no está presente en ninguna de las tres tablas.

Respuesta

11

Parece que lo que desea es añadir un valor codificado adicional a su lista de SELECT

CREATE OR REPLACE VIEW DETAILS 
AS SELECT 
* FROM 
(
SELECT 
    T1.ID, 
    T1.AMOUNT, 
    T1.STATUS, 
    T1.ADDEDBY, 
    T1.ADDEDON, 
    'T1' tableID 
FROM Table1 T1 
UNION ALL 
SELECT 
    T2.ID, 
    T2.AMOUNT, 
    T2.STATUS, 
    T2.ADDEDBY, 
    T2.ADDEDON, 
    'T2' tableID 
FROM Table2 T2 
UNION ALL 
SELECT 
    T3.ID, 
    T3.BILLAMOUNT, 
    T3.STATUS, 
    T3.ADDEDBY, 
    T3.ADDEDON, 
    'T3' tableID 
FROM Table3 T3 
); 
+0

Gracias, esto fue útil – user1181942

+0

Me aparece 'SELECT de la vista contiene una subconsulta en la cláusula FROM' ¿esta sintaxis es específica de Oracle? Tengo mysql (corriendo a través de phpmyadmin) thx – Awena

+0

@Awena - La sintaxis debe ser ANSI estándar (aunque el estándar puede requerir que la vista en línea tenga un alias). No tengo idea, sin embargo, si MySQL lo soporta o qué ajustes serían necesarios para que la consulta funcione en MySQL. –

0

¿De dónde vienen los datos para la columna?

Puede agregar datos completamente estáticos si eso es lo que busca:

select 'hello there' from Table1; 

create view v1 as select 123 as table_id, a_column from Table2; 

select 'Table1' as table_id, a_column from Table1 
union all 
select 'Table2', a_column from Table2 
5
CREATE OR REPLACE VIEW DETAILS 
AS SELECT 
* FROM 
(
SELECT 
    T1.ID, 
    T1.AMOUNT, 
    T1.STATUS, 
    T1.ADDEDBY, 
    T1.ADDEDON, 
    'Table1' as tableid 
FROM Table1 T1 
UNION ALL 
SELECT 
    T2.ID, 
    T2.AMOUNT, 
    T2.STATUS, 
    T2.ADDEDBY, 
    T2.ADDEDON, 
    'Table2' as tableid 
FROM Table2 T2 
UNION ALL 
SELECT 
    T3.ID, 
    T3.BILLAMOUNT as AMOUNT, 
    T3.STATUS, 
    T3.ADDEDBY, 
    T3.ADDEDON,  
    'Table3' as tableid 
FROM Table3 T3 
); 
+0

Gracias, esto fue útil – user1181942

-2
create or replace view view1(col1,col2,col3) as select col1,col2,nul 
0

Existe una mejor solución para esto;

NULL AS COLUMN_NAME es un identificador.

CREATE VIEW MY_VIEW 
    AS 
     (SELECT A.*,NULL AS COLUMN1,NULL AS COLUMN2,NULL AS COLUMN3 
      FROM MY_TABLE A) 
0

Lo que hice por lo mismo.

  1. abrir phpmyadmin.
  2. Seleccionar base de datos.
  3. clic en el menú SQL
  4. carrera siguiente comando como-

CREATE VIEW table_name AS SELECT tableA.id, tableA.name, tableA.duty_hours, tableA.rate, NULL AS 'additional_field1',NULL AS 'additional_field2', NULL AS 'additional_field3', tableB.name, tableB.email, tableB.charge, NULL AS 'additional_field4' FROM tableA join tableB using (id) ; 

que trabajó para mí.

Cuestiones relacionadas