在MySQL中使用`database_name`.`viewname`。*语法进行选择会抛出“未知表'database_name.viewname'”

时间:2018-07-25 12:43:03

标签: mysql sql view

我在使用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_nametable_name

我已经使用ORM映射了此视图,并指定了其前缀,结果查询如下:

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

但是此查询返回以下错误:

#1051 - Unknown table 'webapp.circuits'

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

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

知道为什么会这样吗?

与视图的定义方式有关吗?

编辑

另一个奇怪的事情: 即使此查询失败:

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

这不是:

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

2 个答案:

答案 0 :(得分:2)

我不愿回答,因为我对mysql不够熟悉,无法给出完整的答案。我在rextester.com上做了一些测试,发现以下内容:

如果我1<p:selectOneMenu id="txtEstado" requiredMessage="Debe ingresar un estado" required="true" value="#{semestreBean.semestre.estado}"> <o:converter converterId="omnifaces.SelectItemsConverter"/> <f:selectItem noSelectionOption="true" itemLabel="Seleccione un estado"/> <f:selectItems value="#{semestreBean.estadosLov}" var="e" itemLabel="#{e.nombre}" itemValue="#{e.id}"/> </p:selectOneMenu> ,则可以使用其完全限定的对象名称来查询它:

create

有效,没问题。

如果我table test(id int)一个SELECT rextester.test.* FROM rextester.test

我不能做同样的事情:

create

返回相同的错误。

我不能从此得出太多结论,因为我不太了解mysql。但是,这似乎是视图的普遍问题,而不是您创建视图的方式。

答案 1 :(得分:1)

MySQL不支持在视图中将*重写为匹配的表列。

MySQL 5.6.39 http://sqlfiddle.com/#!9/68f2d3/4

MySQL 5.7 https://www.db-fiddle.com/f/taRV6FLAP6Mf8oMeuniZP3/2

MySQL 8.0.11 https://www.db-fiddle.com/f/taRV6FLAP6Mf8oMeuniZP3/3