2012-07-23 36 views
5

Tôi muốn tạo chế độ xem với sự kết hợp của ba bảng. Nhưng trong truy vấn kết quả tôi muốn thêm một cột như 'tableId'.Thêm cột bổ sung để xem, không có trong bảng

Mã của tôi cũng giống như

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

này mang lại cho tôi công đoàn của cần ba bảng. Nhưng làm thế nào tôi có thể nhận được cột Id bảng trong kết quả đầu ra? Cột này không có mặt trong bất kỳ trong ba bảng.

Trả lời

11

Có vẻ như bạn chỉ muốn thêm một giá trị mã hóa cứng thêm vào danh sách SELECT bạn

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

Cảm ơn điều này là hữu ích – user1181942

+0

Tôi nhận được 'Xem của SELECT chứa một truy vấn con trong mệnh đề FROM' là cú pháp cụ thể cho Oracle? Tôi có mysql (chạy qua phpmyadmin) thx – Awena

+0

@Awena - Cú pháp phải là chuẩn ANSI (mặc dù tiêu chuẩn có thể yêu cầu xem nội tuyến được đặt bí danh). Tôi không có ý tưởng, tuy nhiên, nếu MySQL hỗ trợ nó hoặc những gì tinh chỉnh sẽ là cần thiết để làm cho truy vấn làm việc trên MySQL. –

0

Dữ liệu cho cột đến từ đâu?

Bạn có thể thêm dữ liệu hoàn toàn tĩnh nếu đó là những gì bạn đang tìm kiếm:

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

Cảm ơn điều này hữu ích – user1181942

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

Có giải pháp tốt hơn cho việc này;

NULL AS COLUMN_NAME là số nhận dạng.

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

Điều tôi đã làm tương tự.

  1. mở phpmyadmin.
  2. chọn cơ sở dữ liệu.
  3. nhấp chuột vào menu sql
  4. chạy lệnh sau như-

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

Đó làm việc cho tôi.

Các vấn đề liên quan