在mysql中使用'database\u name`.'viewname`.*语法选择时抛出“unknown table'database\u name.viewname'”

zd287kbt  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(254)

我对mysql和数据库视图有一个奇怪的问题。
我有这样一个观点:

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)

我必须将此视图与另一个数据库中的表连接起来。
为此,我通常在表名前面加上数据库名,如 db_name . table_name .
我使用ormMap了这个视图,指定了它的前缀,结果查询如下:

SELECT `webapp`.`circuits`.* FROM `webapp`.`circuits`

但此查询返回以下错误:


# 1051 - Unknown table 'webapp.circuits'

但是,我尝试手动运行查询并删除 webapp . 来自的前缀 SELECT 语句,它按预期工作,完全不抛出错误

SELECT `circuits`.* FROM `webapp`.`circuits`

知道为什么会这样吗?
它与视图的定义方式有关吗?

编辑

另一件奇怪的事:即使这个查询失败了:

SELECT `webapp`.`circuits`.* FROM `webapp`.`circuits`

这并不意味着:

SELECT `webapp`.`circuits`.Id FROM `webapp`.`circuits`
hfsqlsce

hfsqlsce1#

mysql不支持seam * 重写到视图中与匹配的表列。
mysql 5.6.39版本http://sqlfiddle.com/#!9/68f2d3/4号楼
MySQL5.7版本https://www.db-fiddle.com/f/tarv6flap6mf8omeunizp3/2
mysql 8.0.11版本https://www.db-fiddle.com/f/tarv6flap6mf8omeunizp3/3

k4emjkb1

k4emjkb12#

我很犹豫回答,因为我对mysql不够熟悉,无法给出完整的答案。不过,我在rextester.com上做了一些测试,发现了以下内容:
如果我 createtable test(id int) ,我可以使用它的完全限定对象名进行查询:

SELECT rextester.test.* 
FROM rextester.test

行,没问题。
如果我 createview so_test as (Select 1 id from dual) 我不能这么做:

SELECT rextester.so_test.* 
FROM rextester.so_test

返回相同的错误。
我不能从中得出太多的结论,因为我对mysql还不够了解。不过,这似乎是视图的一般问题,而不是您创建视图的方式。

相关问题