2017-11-25 50 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的视图中,无法使视图可更新,因为数据源不明确或聚合。这就是我的意思。请参阅上面的编辑以获得更多的说明。 –

相关问题