2017-11-25 145 views
0

這裏是一個查看名爲viewwithcommonfield:「SHOW COLUMNS」命令中的字段如何映射到特定表?

SELECT 
     `schematopologytest01`.`talpha`.`CommonField` AS `CommonField_tAlpha`, 
     `schematopologytest01`.`tbeta`.`CommonField` AS `CommonField_tBeta` 
    FROM 
     (`schematopologytest01`.`talpha` 
     JOIN `schematopologytest01`.`tbeta`) 

當我執行

SHOW FULL fields FROM viewwithcommonfield IN SchemaTopologyTest01 

我得到這個: Results of SHOW FULL...

如何字段映射回特定的表?我可以針對information_schema中的表編寫視圖嗎?

以下是視圖中引用的表結構。該表共享稱爲CommonField公共字段: enter image description here

回答

0

沒有,也沒有提供給基表回到原來的列映射視圖的列的元數據。這將需要多個表,因爲select-list中的任何給定表達式可能引用不同表中的多個列。

考慮:

SELECT CONCAT(
    `schematopologytest01`.`talpha`.`AlphaFieldA`, 
    `schematopologytest01`.`tbeta`.`BetaFieldE`) AS `ConcatenatedField` 
FROM `schematopologytest01`.`talpha` 
JOIN `schematopologytest01`.`tbeta` ON ... 

哪個表和列將ConcatenatedField列表作爲它的來歷?它必須存儲在另一個INFORMATION_SCHEMA表的兩行中。

有在不引用任何基礎表的視圖也可以選擇列表表達式:

CREATE VIEW ViewNow AS SELECT NOW() AS `now`; 

什麼本身是標量子查詢列?或者對存儲函數的引用?或者像COUNT()SUM()這樣的聚合函數,其中的值在任何基表中都找不到?

許多視圖根本不確定地從基表中派生它們的數據。編輯:我的意思是,並不總是可以知道哪些行或列是視圖中數據的來源,因爲它們的結果以某種方式組合在一起。這可能更清楚地說,正反向查詢獲取原始數據並不總是可能的,這取決於查詢。

無法更新這些視圖。但是如果有關於數據「來自何處」的元數據,則元數據中必須包含某些內容以表明這一點。這將是不切實際的,因爲它會很複雜,價值不大。

+0

「許多視圖根本不確定性地從基表推導出它們的數據。」whaaaa ?? – nicomp

+0

例如,在任何具有GROUP BY或DISTINCT或UNION以及某些JOIN的視圖中,無法使視圖可更新,因爲數據源不明確或聚合。這就是我的意思。請參閱上面的編輯以獲得更多的說明。 –

相關問題