[前][次][番号順一覧][スレッド一覧]

mysql:16446

From: meiji kimura <meiji kimura <meiji.kimura@xxxxxxxxxx>>
Date: Mon, 04 Dec 2017 10:04:29 +0900
Subject: [mysql 16446] Re: MySQL8.0のwindow関数と他DBとの比較結果

木村明治です。状況を以下のようにバグ登録し、担当者からの回答がついてます。

CTE with window function don't work with update/delete as expected.
https://bugs.mysql.com/bug.php?id=88397

(Bug内では動作する例としてSQL Server 2017 on Linuxを使ってます)

少なくとも制限に書く必要はありそうなので、その点は別途バグ登録しようと思 
います。

(2017/11/04 14:35), mysql201706mailing@xxxxxxxxxx wrote:
> 明智重蔵です。
>
> MySQL8.0でWindow関数を使ったビューは、
> 更新(および削除)不可のようですね。
> ありがとうございました。
>
>     ----- Original Message -----
>     *From:* meiji kimura <meiji.kimura@xxxxxxxxxx>
>     *To:* ml@xxxxxxxxxx
>     *Date:* 2017/11/4, Sat 13:04
>     *Subject:* [mysql 16440] Re: MySQL8.0のwindow関数と他DBとの比較結果
>
>     木村明治です。
>
>     取り急ぎためしてみました。
>
>     (2017/11/04 12:03), mysql201706mailing@xxxxxxxxxx
>     <mailto:mysql201706mailing@xxxxxxxxxx> wrote:
>      > 明智重蔵です。
>      >
>      > MySQL8.0のWindow関数を他DBと比較してまして、
>      > MySQLエキスパートの皆様に御願いがあります。
>      >
>      > MySQL8.0が動かせる方がおりましたら、
>      > 比較3を、試した結果を書いていただけないでしょうか?
>      > (同様の比較をされる方に、有用な情報になると思いますので)
>
>     8.0.3では以下のようにどちらもエラーになります。
>
>     mysql [localhost] {msandbox} (test) >
>     mysql [localhost] {msandbox} (test) > with UpdView as(
>          -> select Val,Row_Number() over(order by Val) as NewVal
>          ->  from TestTable)
>          -> update UpdView set Val = NewVal;
>     ERROR 1288 (HY000): The target table UpdView of the UPDATE is not
>     updatable
>
>     mysql [localhost] {msandbox} (test) >
>     mysql [localhost] {msandbox} (test) > with DelView as(
>          -> select Row_Number() over(order by Val) as rn
>          ->  from TestTable)
>          -> delete from DelView where rn < 3;
>     ERROR 1146 (42S02): Table 'test.DelView' doesn't exist
>
>      > ■■■比較1■■■■■■■■■■■■■■■■■■■■■■■■■■■
>      > Oracleで可能な、
>      > Lag,Lead,First_Value,Last_Value,Nth_Valueでのignore nulls
>      >
>      >
>     https://www.slideshare.net/oysteing/common-table-expressions-cte-window-functions-in-mysql-80
>     <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.slideshare.net_oysteing_common-2Dtable-2Dexpressions-2Dcte-2Dwindow-2Dfunctions-2Din-2Dmysql-2D80&d=DwMFaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=GNgoqPdiFhTG1pZngMpFGFaAQsvtTeh5BjMIGT-TWsw&m=0uQDDzbyFE16M3mLi3ugypzv7jpcjZ0cDUZs1PU-reE&s=fl62__JrM6nBPARIUMnSLyhC_uAzd7S8NXl_q17EnTk&e=>
>      > の48ページと49ページによると、MySQL8.0では不可
>      >
>      > ■■■比較2■■■■■■■■■■■■■■■■■■■■■■■■■■■
>      > ソートキーが日付型で、Range指定でのInterVal型の使用
>      >
>      >
>     https://www.slideshare.net/oysteing/common-table-expressions-cte-window-functions-in-mysql-80
>     <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.slideshare.net_oysteing_common-2Dtable-2Dexpressions-2Dcte-2Dwindow-2Dfunctions-2Din-2Dmysql-2D80&d=DwMFaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=GNgoqPdiFhTG1pZngMpFGFaAQsvtTeh5BjMIGT-TWsw&m=0uQDDzbyFE16M3mLi3ugypzv7jpcjZ0cDUZs1PU-reE&s=fl62__JrM6nBPARIUMnSLyhC_uAzd7S8NXl_q17EnTk&e=>
>      > の35ページによると、MySQL8.0で可能です
>      >
>      > ■■■比較3■■■■■■■■■■■■■■■■■■■■■■■■■■■
>      > SQLServerで可能な、
>      > Window関数を使用したインラインビューでのUpdateとDelete
>      >
>      > create table TestTable(
>      > Val int unsigned);
>      >
>      > insert into TestTable values
>      > (1),(3),(5),(10),(20),(30),(40);
>      >
>      > with UpdView as(
>      > select Val,Row_Number() over(order by Val) as NewVal
>      >    from TestTable)
>      > update UpdView set Val = NewVal;
>      >
>      > with DelView as(
>      > select Row_Number() over(order by Val) as rn
>      >    from TestTable)
>      > delete from DelView where rn < 3;
>      >
>      >
>     https://www.slideshare.net/oysteing/mysql-80-common-table-expressions-71760102
>     <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.slideshare.net_oysteing_mysql-2D80-2Dcommon-2Dtable-2Dexpressions-2D71760102&d=DwMFaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=GNgoqPdiFhTG1pZngMpFGFaAQsvtTeh5BjMIGT-TWsw&m=0uQDDzbyFE16M3mLi3ugypzv7jpcjZ0cDUZs1PU-reE&s=e9eMsXBdHrncSYvXL1k8fR7SzBU2BHA9M0Q0LeByj0Q&e=>
>      > の5ページに書いてある構文です。
>      >
>      > https://dev.mysql.com/doc/refman/8.0/en/view-updatability.html
>      > にWindow関数を使うと更新(および削除)不可と書いてないので
>      > 更新(および削除)可能と予想してます。
>
>     上記のとおりです。ちなみにFirebird 3.0の場合は、そもそもCTEがselectのみ
>     の対応なので、当然エラーになります。(token select 以外は×)
>
>     create table TestTable(Val int);
>
>     insert into TestTable values(1);
>     insert into TestTable values(3);
>     insert into TestTable values(5);
>     insert into TestTable values(10);
>     insert into TestTable values(20);
>     insert into TestTable values(30);
>     insert into TestTable values(40);
>
>     commit;
>     SQL> with UpdView as(
>     CON> select Val,Row_Number() over(order by Val) as NewVal
>     CON>  from TestTable)
>     CON> update UpdView set Val = NewVal;
>     Statement failed, SQLSTATE = 42000
>     Dynamic SQL Error
>     -SQL error code = -104
>     -Token unknown - line 4, column 1
>     -update
>     SQL>
>     SQL> with DelView as(
>     CON> select Row_Number() over(order by Val) as rn
>     CON>  from TestTable)
>     CON> delete from DelView where rn < 3;
>     Statement failed, SQLSTATE = 42000
>     Dynamic SQL Error
>     -SQL error code = -104
>     -Token unknown - line 4, column 1
>     -delete
>


[前][次][番号順一覧][スレッド一覧]

   @ 16439 2017-11-04 12:03 [<mysql201706mailing@] MySQL8.0のwindow関数と他DBとの比較結果  
     16440 2017-11-04 13:04 ┗[meiji kimura <meiji.]                                       
   @ 16441 2017-11-04 14:35  ┗[<mysql201706mailing@] Re: [mysql 16440] Re: MySQL8.0のwindow関数と他DBとの比較結果
->   16446 2017-12-04 10:04   ┗[meiji kimura <meiji.] Re: MySQL8.0のwindow関数と他DBとの比較結果