web-dev-qa-db-ja.com

FROM句にサブクエリが含まれている場合、ビューは挿入できません

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句にサブクエリがあるビューに挿入することは可能ですか、それともここで何か間違ったことをしていますか?

4
Amit Chigadani

まず第一に、なぜfrom句でサブクエリを使用するのかまったくわかりません。サブクエリにはデータのフィルタリング、グループ化、フォーマットはありません。テーブルから1つのフィールドを選択するだけです。 care_noteテーブルに直接結合するだけです。

ただし、さらに重要なことに、MySQLは非常に賢明な ビューへの挿入の制限 を適用します。

挿入可能性(INSERTステートメントで更新可能)に関して、更新可能なビューは、ビュー列の次の追加要件も満たしている場合に挿入可能です。

.。

•ビューには、デフォルト値を持たないベーステーブルのすべての列が含まれている必要があります。

.。

この制限はnoteサブクエリでは失敗し、エラーメッセージが表示されます。

更新

サブクエリにはgroupby関数と集計関数が含まれているという以下のOPによるコメントを反映して、上記で参照したのと同じMySQLドキュメントにも次のように記載されています。

具体的には、ビューに次のいずれかが含まれている場合、ビューは更新できません。

•集計関数(SUM()、MIN()、MAX()、COUNT()など)

•.。

•GROUPBY

.。

これは、サブクエリが確実に更新できないことを意味します。これは、ビューを挿入できないが、他の部分は更新できることも意味します。

2
Shadow