创建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=1posts.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 子类,在哪里添加子视图?

创建触发器的 MySql 查询中的错误在哪里

用mysql创建表格,不知道哪里错了

MySQL workbench 在哪里创建event?

Android:在哪里以及如何自动刷新列表视图(我有刷新功能)

laravel 4 视图,在哪里放置基于类的作曲家