我有一个mysql视图,它在FROM子句中有子查询。此视图可更新。我试着更新单张表,它运行得很好。但我无法插入到那张桌子上。上面写着:
错误代码: 1471。插入的目标表action_view不可插入。
我的视野:
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`)运行良好的更新查询:
update action_view set idCareActionHead = 1 where action_view.id =25;插入产生上述错误的查询:
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子句中插入哪些子查询,或者我在这里做了什么错误?
发布于 2018-02-28 14:56:07
首先,我不明白为什么在from子句中使用子查询。子查询中没有数据的筛选、分组和格式设置,您只需从表中选择一个字段。您可以直接在care_note表上加入。
然而,更重要的是,MySQL应用了一个非常明智的对插入视图的限制
关于可插入性(可以用INSERT语句更新),如果可更新视图满足视图列的这些额外要求,则可插入视图: ..。 视图必须包含基表中没有默认值的所有列。 ..。
对于note子查询,此限制失败,导致收到错误消息。
更新
在下面OP的评论中,子查询确实包含group函数和聚合函数--上面引用的相同的MySQL文档还说:
更具体地说,如果视图包含以下任何内容,则该视图不可更新: ·聚合函数(SUM()、MIN()、MAX()、COUNT()等) ·.. ·小组成员 ..。
这意味着子查询绝对不可更新。这也意味着视图不能插入,但它的其他部分仍然可以更新。
https://stackoverflow.com/questions/49029139
复制相似问题