Mysql ALTER VIEW仅为一个视图插入数据库前缀

Mysql ALTER VIEW仅为一个视图插入数据库前缀,mysql,mysql-workbench,Mysql,Mysql Workbench,有一个奇怪的问题 我在我的应用程序中使用了几个db视图。所有视图只引用它们的表,而不以db名称为前缀,例如 SELECT `foo`, `bar` FROM `tablename` 不过,我有一个看法是: SELECT `foo`, `bar` FROM `database_name`.`table_name` 在执行模式比较时,这会引起麻烦 我已经使用ALTER view多次编辑了该视图,但每次它都将数据库名称作为前缀重新插入。我也从零开始删除并重新创建了它,但结果相同 不

有一个奇怪的问题

我在我的应用程序中使用了几个db视图。所有视图只引用它们的表,而不以db名称为前缀,例如

SELECT  `foo`, `bar`
FROM    `tablename`
不过,我有一个看法是:

SELECT  `foo`, `bar`
FROM    `database_name`.`table_name`
在执行模式比较时,这会引起麻烦

我已经使用ALTER view多次编辑了该视图,但每次它都将数据库名称作为前缀重新插入。我也从零开始删除并重新创建了它,但结果相同

不过,它只对这一个视图执行此操作

我正在使用MySQL Workbench 6.3.10。以下是完整的声明:

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER
VIEW `reporting_base` AS
    SELECT 
        `b`.`creditor_id` AS `creditor_id`,
        `c`.`creditor_name` AS `creditor_name`,
        `c`.`group_name` AS `group_name`,
        `rd`.`base_date` AS `base_date`,
        `rd`.`year` AS `year`,
        `rd`.`period` AS `period`,
        `rd`.`week` AS `week`,
        `b`.`id` AS `branch_id`,
        `b`.`branch_name` AS `branch_name`,
        `b`.`area` AS `area`,
        `b`.`manager` AS `manager`,
        `s`.`id` AS `staff_id`,
        `s`.`type` AS `staff_type`,
        `s`.`full_name` AS `staff_name`
    FROM
        (((`database_name`.`reporting_dates` `rd`
        JOIN `database_name`.`branches` `b`)
        JOIN `database_name`.`creditors` `c` ON (((`c`.`id` = `b`.`creditor_id`)
            AND (`c`.`include_in_reports` = 1))))
        LEFT JOIN (SELECT 
            0 AS `id`,
                `database_name`.`creditors`.`id` AS `creditor_id`,
                'n/a' AS `type`,
                'n/a' AS `full_name`
        FROM
            `database_name`.`creditors` UNION SELECT 
            `database_name`.`staff`.`id` AS `id`,
                `database_name`.`staff`.`creditor_id` AS `creditor_id`,
                `database_name`.`staff`.`type` AS `type`,
                `database_name`.`staff`.`full_name` AS `full_name`
        FROM
            `database_name`.`staff`) `s` ON ((`s`.`creditor_id` = `c`.`id`)))
    WHERE
        (`rd`.`base_date` <= UTC_DATE())

如果整个CREATEVIEW语句中存在歧义…它可能会添加数据库名称

...from (((''table1' 'rd' 
join 'dbname'.'table2' 'b'...

本身足以将“dbname”触发到视图代码中。

当我删除对数据库的所有引用时,它仍然会这样做,不应该有歧义的解决方案吗?在更改视图之前,选择数据库名称作为默认数据库。因此,当数据库名称被更改时,它不会被追加。