为什么呢? 我试图动态找到外键指向的位置。为此我在information_schema.KEY_COLUMN_USAGE中搜索。它适用于表格,但不适用于视图。
在information_schema.VIEWS中引用了视图,view_definition字段公开了查询。 我认为这是我唯一可以找到关于视野来自何处的信息,对吗?
然后,我会在SELECT和FROM之间搜索我的字段名称。如果是别名,请获取表字段名称和表名称(如果是别名,则解析该表)。
最后的复杂情况,视图可以引用另一个视图,然后代码必须是递归的。
我们举一个例子(视图名称是vw_mandates_articles):
select ma.*, a.id_articles_unit, a.id_articles_category from mandates_articles ma
left join articles a on ma.id_article = a.id
它存储在VIEWS表中的方式是:
select `ma`.`id` AS `id`,
`ma`.`id_mandate` AS `id_mandate`,
`ma`.`id_article` AS `id_article`,
`ma`.`unit_price` AS `unit_price`,
`ma`.`description` AS `description`,
`a`.`id_articles_unit` AS `id_articles_unit`,
`a`.`id_articles_category` AS `id_articles_category`
from (`ste`.`mandates_articles` `ma`
left join `ste`.`articles` `a` on((`ma`.`id_article` = `a`.`id`)))
我的输入是:
预期产出:
我不是要求某人为我编写,我只想在挖掘之前验证该方法。
有什么想法?好/坏方法,替代方案?
提前感谢您的灯光
答案 0 :(得分:1)
是。视图仅在information_schema.VIEWS表中的查询中存储了字段。
在查询中没有比爆炸等更好的方法...
我不建议制作递归视图。可以肯定的是它会很慢(mysql 将 必须将临时结果存储在硬盘上,这实际上并没有提高性能)。
即使这不是最佳做法,我也倾向于通过使用一个查询(最多1个子选择)来增加冗余并获取数据。