我在 MySQL 和数据库 View 方面遇到了一个奇怪的问题。
我有一个这样定义的 View :
CREATE VIEW circuits AS
(SELECT Id, Id AS Old_Id, Name FROM circuits_1)
UNION
(SELECT Id + 1000 AS Id, Id AS Old_Id, Name FROM circuits_2)
我必须将此 View 与另一个数据库中的表连接起来。
为此,我通常在表名前加上它的数据库名,例如 db_name
.table_name
。
我已经使用 ORM 映射了这个 View ,指定了它的前缀,结果查询是这个:
SELECT `webapp`.`circuits`.* FROM `webapp`.`circuits`
但是这个查询返回这个错误:
#1051 - Unknown table 'webapp.circuits'
但是,我尝试手动运行查询并删除 webapp
。 SELECT
语句的前缀,它按预期工作,完全没有错误
SELECT `circuits`.* FROM `webapp`.`circuits`
知道为什么会这样吗?
是否与 View 的定义方式有关?
编辑
另一个奇怪的事情: 即使此查询失败:
SELECT `webapp`.`circuits`.* FROM `webapp`.`circuits`
这不是:
SELECT `webapp`.`circuits`.Id FROM `webapp`.`circuits`
最佳答案
我对回答犹豫不决,因为我对 mysql 不够熟悉,无法给出完整的答案。不过,我在 rextester.com 上做了一些测试,发现了以下内容:
如果我创建
一个table test(id int)
,我可以使用它的完全限定对象名查询它:
SELECT rextester.test.*
FROM rextester.test
工作,没问题。
如果我创建
一个view so_test as (Select 1 id from dual)
我不能这样做:
SELECT rextester.so_test.*
FROM rextester.so_test
返回与您得到的相同的错误。
我不能从中得出太多结论,因为我不太了解 mysql。但是,这似乎是 View 的普遍问题,而不是您创建它的方式。
关于mysql - 在 MySQL 中选择使用 `database_name` .`viewname` .* 语法会抛出 "Unknown table ' database_name.viewname'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51519196/