2014-03-31 93 views
0

我想在具有數據的表與另一個具有該字段必須顯示或不顯示標誌的表之間創建視圖。如何在兩個表之間創建一個Mysql視圖

TABLE_EXAMPLE

+---------+---------+---------+-----------------+ 
| id  | field_1 | field_2 | field_3   | 
+---------+---------+---------+-----------------+ 
| 1  | test | 500  | another content | 
+---------+---------+---------+-----------------+ 
| 2  | blah | 800  | text_lorem  | 
+---------+---------+---------+-----------------+ 
| 3  | hi!  | 100  | lorem_impsum | 
+---------+---------+---------+-----------------+ 

REFERENCE_TABLE(該表是加入了與由表名,FIELD_NAME,entry_id另一個表,另一個字段是顯示/ not_show標誌)

+--------------+------------+----------+------+ 
| table_name | field_name | entry_id | show | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_1 | 1  | 0 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_2 | 1  | 1 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_3 | 1  | 0 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_1 | 2  | 1 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_2 | 2  | 0 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_3 | 2  | 1 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_1 | 3  | 1 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_2 | 3  | 1 | 
+--------------+------------+----------+------+ 
| TABLE_EXAMPLE| field_3 | 3  | 0 | 
+--------------+------------+----------+------+ 

這裏是最終的觀點。如果該標誌爲0的字段內容必須是NULL

RESULT_TABLE

+---------+---------+---------+-----------------+ 
| id  | field_1 | field_2 | field_3   | 
+---------+---------+---------+-----------------+ 
| 1  | NULL | 500  | NULL   | 
+---------+---------+---------+-----------------+ 
| 2  | blah | NULL | text_lorem  | 
+---------+---------+---------+-----------------+ 
| 3  | hi!  | 100  | NULL   | 
+---------+---------+---------+-----------------+ 

任何想法或建議?我無法得到它。

回答

0

如果REFERENCE_TABLE有每個實體的各個領域標誌,那麼你可以使用這個:

SELECT 
    T1.ID, 
    MAX(CASE WHEN T2.field_name = 'field_1' AND T2.show = 1 THEN T1.field_1 END) field_1, 
    MAX(CASE WHEN T2.field_name = 'field_2' AND T2.show = 1 THEN T1.field_2 END) field_2, 
    MAX(CASE WHEN T2.field_name = 'field_3' AND T2.show = 1 THEN T1.field_3 END) field_3, 
FROM TABLE_EXAMPLE T1 
    JOIN REFERENCE_TABLE T2 
    ON T1.id = T2.entity_id 
WHERE T2.table_name = 'TABLE_EXAMPLE' 
GROUP BY T1.ID 

或使用LEFT JOIN如果忽略一些標誌。然後省略標誌將會把爲0

+0

謝謝! @Hamlet_Hakobyan – hanskait

0

在這裏你加入到表三次,然後用一個case語句,以確定哪些值是每列一個方法:

select e.id, 
     (case when r1.show then e.field_1 end) as field_1, 
     (case when r2.show then e.field_2 end) as field_2 
     (case when r3.show then e.field_3 end) as field_3 
from table_example e left join 
    reference_table r1 
    on r1.table_name = 'table_name' and r1.entry_id = e.id and r1.column_name = 'field_1' left join  
    reference_table r2 
    on r2.table_name = 'table_name' and r2.entry_id = e.id and r2.column_name = 'field_2 left join  
    reference_table r3 
    on r3.table_name = 'table_name' and r3.entry_id = e.id and r3.column_name = 'field_3'; 
0

您可以使用在其他的答案中所列的SELECT -statements如下創建視圖:

CREATE VIEW v1 AS 
select id, if(f1.shw=1,field_1,null) field_1, if(f2.shw=1,field_2,null) field_2,  if(f3.shw=1,field_3,null) field_3 
from TABLE_EXAMPLE 
    left join REFERENCE_TABLE as f1 on (f1.entry_id=TABLE_EXAMPLE.id and f1.field_name="field_1" and f1.table_name='TABLE_EXAMPLE') 
    left join REFERENCE_TABLE as f2 on (f2.entry_id=TABLE_EXAMPLE.id and f2.field_name="field_2" and f2.table_name='TABLE_EXAMPLE') 
    left join REFERENCE_TABLE as f3 on (f3.entry_id=TABLE_EXAMPLE.id and f3.field_name="field_3" and f3.table_name='TABLE_EXAMPLE'); 
相關問題