2012-07-23 46 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) ; 

爲我工作。