我在使用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
。
我已经使用ORM映射了此视图,并指定了其前缀,结果查询如下:
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`
答案 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