2012-07-23 47 views
5

我想创建视图与三个表的联合。但在结果查询中,我想要一个额外的列,如'tableId'。添加额外的列来查看,这是不存在的表

我的代码是这样

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

这给了我所需要的三个表的联合。 但是我怎样才能得到表Id列结果输出?该列不在三个表中的任何一个中。

回答

11

这听起来像你只是想一个额外的硬编码值添加到您的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

感谢这很有帮助 – user1181942 2012-07-23 08:15:03

+0

我得到'视图的SELECT包含FROM子句中的子查询'是这种特定于Oracle的语法吗?我有MySQL(通过phpmyadmin运行)thx – Awena 2015-04-01 13:21:22

+0

@Awena - 语法应该是ANSI标准(虽然标准可能需要内联视图是别名)。然而,我不知道,如果MySQL支持它,或者需要做什么调整来使查询在MySQL上工作。 – 2015-04-01 14:36:24

0

列的数据来自哪里?

您可以添加完全静态的数据,如果这是你在找什么:

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

谢谢,这很有帮助 – user1181942 2012-07-23 08:14:57

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

有一个更好的解决方案,

NULL AS COLUMN_NAME是标识符。

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

我对此做了什么。

  1. 打开phpmyadmin。
  2. 选择数据库。
  3. 单击SQL菜单上
  4. 运行以下命令原样

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

为我工作。