mysql:16441
From: <mysql201706mailing@xxxxxxxxxx>
Date: Sat, 4 Nov 2017 14:35:11 +0900 (JST)
Subject: [mysql 16441] Re: [mysql 16440] Re: MySQL8.0のwindow関数と他DBとの比較結果
明智重蔵です。 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 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 >> の48ページと49ページによると、MySQL8.0では不可 >> >> ■■■比較2■■■■■■■■■■■■■■■■■■■■■■■■■■■ >> ソートキーが日付型で、Range指定でのInterVal型の使用 >> >> https://www.slideshare.net/oysteing/common-table-expressions-cte-window-functions-in-mysql-80 >> の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 >> の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との比較結果