创建mysql视图在哪里
Posted
技术标签:
【中文标题】创建mysql视图在哪里【英文标题】:Create mysql view where 【发布时间】:2017-11-28 09:21:33 【问题描述】:我有两张桌子:posts(id,title,text,type)
和 images(id, post_id, url)
。
我想从 posts.type=1
和 posts.id = image.post_id
的所有帖子中创建视图。真的吗?
当我尝试时:
CREATE VIEW image_posts AS
SELECT *
FROM posts id
INNER JOIN images post_id ON post_id = id;
我明白了:
Error in query (1052): Column 'id' in on clause is ambiguous
【问题讨论】:
你没有给我们写你的查询FROM posts id
- 你真的知道这是什么……吗?
您误解了表别名。通过编写posts id
,您在posts
表上设置了一个别名,表示每当您在查询中的其他地方引用id
时,您的意思是posts
表。如果两个表具有相同的字段名称,则需要限定表以及字段名称。一个合格的字段引用是这样的:posts.id
。在您的情况下,限定字段名称为 id.id
,因为您设置了别名。
一般来说,如果 SELECT 不起作用,那么随后从中构造的视图也不起作用。
请按minimal reproducible example行事。并告诉我们您在没有特定表/列/约束名称的情况下使用谷歌搜索错误消息时学到了什么。这是一个常见问题解答。
【参考方案1】:
是的,这是可能的。要创建视图,您需要编写希望视图显示结果的查询,然后在其前面添加CREATE VIEW <name> AS
。
CREATE VIEW mymegaview AS
SELECT posts.id, posts.title,posts.text, posts.type, image.id as image_id,
image.post_id, image.url
FROM `posts` LEFT JOIN `image`
ON posts.id = image.post_id AND posts.type=1
【讨论】:
另外,请注意,如果一个帖子有多个图像,那么在该视图中,您将有多个具有相同 ID 的帖子。【参考方案2】:CREATE VIEW image_posts AS
SELECT posts.id, posts.title, posts.text, posts.type, images.id as imgid,images.images
FROM posts posts INNER JOIN images images ON images.post_id = posts.id
AND posts.type=1;
请参考 CREATE VIEW 语法:https://dev.mysql.com/doc/refman/5.7/en/create-view.html
【讨论】:
以上是关于创建mysql视图在哪里的主要内容,如果未能解决你的问题,请参考以下文章
在代码中创建 UIScrollView 子类,在哪里添加子视图?