首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果它在FROM子句中包含子查询,则视图不可插入。

如果它在FROM子句中包含子查询,则视图不可插入。
EN

Stack Overflow用户
提问于 2018-02-28 12:02:35
回答 1查看 13.3K关注 0票数 4

我有一个mysql视图,它在FROM子句中有子查询。此视图可更新。我试着更新单张表,它运行得很好。但我无法插入到那张桌子上。上面写着:

错误代码: 1471。插入的目标表action_view不可插入。

我的视野:

代码语言:javascript
运行
复制
    CREATE OR REPLACE
VIEW `action_view` AS
    SELECT 
        `ca`.`id` AS `id`,
        `cah`.`title` AS `title`,
        `ca`.`idCareActionHead` AS `idCareActionHead`,
        `ca`.`idPeople` AS `idPeople`,
        `ca`.`assignedTo` AS `assignedTo`,
        `ca`.`dueDate` AS `dueDate`,
        `note`.idCareAction AS `idCareAction`
    FROM
       `care_action` `ca`
        JOIN `care_action_head` `cah`
        JOIN `people` `p`
        JOIN (SELECT 
            `cn`.`idCareAction` AS `idCareAction`
        FROM `care_note` `cn`) `note`

    WHERE
        `ca`.`idCareActionHead` = `cah`.`id`
            AND (`ca`.`idPeople` = `p`.`id`)
            AND (`note`.`idCareAction` = `ca`.`id`)

运行良好的更新查询:

代码语言:javascript
运行
复制
update action_view set idCareActionHead = 1 where action_view.id =25;

插入产生上述错误的查询:

代码语言:javascript
运行
复制
insert into action_view (idCareActionHead, idPeople) values (12, 4);

我已经引用了最新的mysql文档。

https://dev.mysql.com/doc/refman/5.7/en/view-updatability.html1,它在SELECT语句中讨论子查询,但在FROM子句中没有提到任何关于子查询的内容。

我的问题是,是否可以在mysql中的FROM子句中插入哪些子查询,或者我在这里做了什么错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 14:56:07

首先,我不明白为什么在from子句中使用子查询。子查询中没有数据的筛选、分组和格式设置,您只需从表中选择一个字段。您可以直接在care_note表上加入。

然而,更重要的是,MySQL应用了一个非常明智的对插入视图的限制

关于可插入性(可以用INSERT语句更新),如果可更新视图满足视图列的这些额外要求,则可插入视图: ..。 视图必须包含基表中没有默认值的所有列。 ..。

对于note子查询,此限制失败,导致收到错误消息。

更新

在下面OP的评论中,子查询确实包含group函数和聚合函数--上面引用的相同的MySQL文档还说:

更具体地说,如果视图包含以下任何内容,则该视图不可更新: ·聚合函数(SUM()、MIN()、MAX()、COUNT()等) ·.. ·小组成员 ..。

这意味着子查询绝对不可更新。这也意味着视图不能插入,但它的其他部分仍然可以更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49029139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档