mysqlビューがあり、[〜#〜] from [〜#〜]句。このビューは更新可能です。単一のテーブルを更新してみましたが、正常に機能しました。しかし、私はそのテーブルに挿入することができません。それは言う:
エラーコード:1471。INSERTのターゲットテーブルaction_viewは挿入できません-に
mysqビュー:
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
句にサブクエリがあるビューに挿入することは可能ですか、それともここで何か間違ったことをしていますか?
まず第一に、なぜfrom
句でサブクエリを使用するのかまったくわかりません。サブクエリにはデータのフィルタリング、グループ化、フォーマットはありません。テーブルから1つのフィールドを選択するだけです。 care_note
テーブルに直接結合するだけです。
ただし、さらに重要なことに、MySQLは非常に賢明な ビューへの挿入の制限 を適用します。
挿入可能性(INSERTステートメントで更新可能)に関して、更新可能なビューは、ビュー列の次の追加要件も満たしている場合に挿入可能です。
.。
•ビューには、デフォルト値を持たないベーステーブルのすべての列が含まれている必要があります。
.。
この制限はnote
サブクエリでは失敗し、エラーメッセージが表示されます。
更新
サブクエリにはgroupby関数と集計関数が含まれているという以下のOPによるコメントを反映して、上記で参照したのと同じMySQLドキュメントにも次のように記載されています。
具体的には、ビューに次のいずれかが含まれている場合、ビューは更新できません。
•集計関数(SUM()、MIN()、MAX()、COUNT()など)
•.。
•GROUPBY
.。
これは、サブクエリが確実に更新できないことを意味します。これは、ビューを挿入できないが、他の部分は更新できることも意味します。