我对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`
2条答案
按热度按时间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
k4emjkb12#
我很犹豫回答,因为我对mysql不够熟悉,无法给出完整的答案。不过,我在rextester.com上做了一些测试,发现了以下内容:
如果我
create
一table test(id int)
,我可以使用它的完全限定对象名进行查询:行,没问题。
如果我
create
一view so_test as (Select 1 id from dual)
我不能这么做:返回相同的错误。
我不能从中得出太多的结论,因为我对mysql还不够了解。不过,这似乎是视图的一般问题,而不是您创建视图的方式。