我正在使用如下所示的查询创建一个视图:
create view v2 as
(select * from appearance a
where exists (
select p.id from photo p, photographer u, person s
where p.takenBy = u.id
and u.id = s.id
and a.isShownIn = p.id
and s.name = 'Fred'
)
);
外观表有2列'shows'和'isShownIn'但是当我尝试在视图中插入时,它给出了错误代码错误代码:1054。'where子句'中的未知列'a.isShownIn'
在浏览这篇文章的时候,我错过了别名,但是对我来说一切都很好看,有人可以指出哪里可能是错误吗?
谢谢!
答案 0 :(得分:1)
您为什么使用exists()
?为什么不加入他们......
create view v2 as
select a.*
from appearance a, photo p, photographer u, person s
where a.isShownIn = p.id
and p.takenBy = u.id
and u.id = s.id
and s.name = 'Fred'
答案 1 :(得分:0)
您将无法在以这种方式创建的视图中插入。只有某些视图可以更新。在您的特定情况下,您应该只插入appearance
表,因为您的视图只是该表中的一个选择。
有关可更新视图的限制,请检查this。您的视图存在此问题:“WHERE子句中的子查询引用FROM子句中的表”
像@Umbrella建议的那样,你可以使用join而不是exists,这样你就可以避免内部查询,并且你可能有可更新的视图,但我真的认为没有必要插入到那个视图中,因为只需插入appearance
表即可获得相同的效果。