mysql - 在 MySQL 中选择使用 `database_name` .`viewname` .* 语法会抛出 "Unknown table ' database_name.viewname'"

标签 mysql sql view

我在 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'

但是,我尝试手动运行查询并删除 webappSELECT 语句的前缀,它按预期工作,完全没有错误

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/

相关文章:

php - 在 php 和 MySQL 中匹配和返回行

php - 设置正确的 MYSQL 表选项

mysql - 仅在对数据进行特定更改时触发

mysql - 如何编写sql查询来获取每个成员的最后一笔交易?

sql - 是否有获取给定存储过程参数默认值的解决方案?

java - Android:如何在布局已经包含按钮的情况下以编程方式覆盖整个布局?

mysql - 如何将 UPDATE WHERE IF @@ROWCOUNT == 0 查询从 MS SQL 转换为 MySQL?

mysql - 如何为 'where' 子句中与数据库表列不匹配(不存在)的项目返回一些默认值

android - 调用 notifyDataSetChanged 时强制 ExpandableListView 更新数据

python - django:根据 get_context_data 中的 get_queryset 结果进行计算