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

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との比較結果