2012-07-23 6 views
5

3つのテーブルで構成されるビューを作成したいとします。しかし、結果クエリでは、 'tableId'のような1つの余分な列が必要です。テーブルに表示されている余分な列を追加しています。

私のコードは、これは私に必要な3つのテーブルの結合を与える

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列を取得するにはどうすればよいですか?この列は、3つの表のいずれにも存在しません。

答えて

11

ですね

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

+0

「ビューのSELECTにはFROM句のサブクエリが含まれています」というのは、Oracle固有の構文ですか?私はmysqlを持っています(phpmyadminを通して実行しています)。 – Awena

+0

@Awena - 構文はANSI標準でなければなりません(標準ではインライン表示にエイリアスが必要かもしれません)。しかし、MySQLがそれをサポートしているかどうか、またはMySQL上でクエリを動作させるためには何が必要になるかはわかりません。 –

0

カラムのデータはどこから得られますか?

それはあなたが探しているものである場合は、完全に静的なデータを追加することができます:あなたは自分のSELECTリストに追加ハードコーディングされた値を追加するよう

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

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

れたまま次のコマンドを実行します。

関連する問題