" SHOW COLUMNS"中的字段如何?命令映射到特定表?

时间:2017-11-25 14:39:20

标签: mysql sql sql-view database-metadata

这是一个名为viewwithcommonfield的视图:

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

1 个答案:

答案 0 :(得分: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()之类的聚合函数,其中的值在任何基表中都找不到?

许多视图根本没有确定性地从基表中获取数据。编辑:我的意思是,并不总是可以知道哪些行或列是视图中的数据源,因为它们的结果以某种方式组合在一起。可能更清楚的是,反转查询以获取原始数据并非总是可行,具体取决于查询。

无法更新这些观看次数。但如果有关于数据来源的元数据,"元数据中必须有一些东西来表明这一点。这是不切实际的,因为它很复杂,价值不大。