

Docker for Windowsの環境で MariaDB に対し、WITH句を使ったSQL文がエラーとなってしまいます。

例えば、

[code]

    SELECT * FROM table01;
    
[/code]

↑これはOKですが、

[code]

    WITH t01 AS (SELECT * FROM table01)
    SELECT * FROM t01;
    
[/code]

これを実行すると、「#42S02 Table `データベース名.table01` dosen't exist in engine」のエラーが返ります。

【試したバージョンと結果】  
**Docker Desktop for Windows**  
mariadb:10.4.24 ： エラー  
mariadb:10.5.15 ： エラー  
mysql:8.0.28 ： OK! エラーにならない

**Linux docker**  
mariadb:10.4.24 ： OK! エラーにならない

つまり、Docker Desktop for WindowsのMariaDBだけエラーとなります。

ちなみに、

[code]

    WITH t01 AS (SELECT * FROM DB名.table01)
    SELECT * FROM t01;
    
[/code]

とWITH句内のテーブル名にDBスキーマを付与すればOKになります。

Windows環境でもLinuxと同じようにエラーとならずに動作させる方法をご存じの方、いらっしゃいますでしょうか？

* * *

## 27-APR-2022 追記

コンテナ、イメージ、接続の状況について正確な情報がないとご指摘いただいたので、再現する手順を明記します。

##### コンテナの起動

[code]

    docker run --name maria10.5 -it -e MARIADB_ROOT_PASSWORD=root -d mariadb:10.5
    
[/code]

##### 起動したコンテナにシェルで入ります

[code]

    docker exec -it maria10.5 /bin/bash
    
[/code]

##### mysqlで接続（rootユーザ、パスワードもroot、DBは 例としてinformation_schemaにします）

[code]

    mysql -p information_schema
    Enter password:
    
[/code]

このSQL文はOK

[code]

    MariaDB [information_schema]> select * from TABLES;
    
[/code]

問題のエラーとなるSQL文

[code]

    MariaDB [information_schema]> with t01 as (select * from TABLES) select * from t01;
    
[/code]

このような手順でWindows環境でMariaDB 10.4, 10.5, MySQL 8.0, Linux環境にてMariaDB 10.4 で試しました。  
するとWindows環境のMariaDBがダメ・・という次第です。


CC BY-SA 4.0
2022-04-25T08:25:24.800
88486
2022-04-27T22:52:33.447
2022-04-27T09:48:21.610
52323
52323
question
sql mariadb
Docker for Windows環境の MariaDB での WITH句（CTE）がエラー


**UPDATE**

`information_schema` に限った話であれば、 Ubuntu上のDocker, Docker for Windows の **両方**
で質問文中の事象が発生しました。  
次のissueのデグレか何かのように思われます。

  * [MDEV-19112 WITH clause does not work with information_schema as default database](https://jira.mariadb.org/browse/MDEV-19112)

他方、 `information_schema` 以外でも発生しているというのであれば、Ubuntu上のDocker, Docker for Windows
共に再現できません。

やはり再現する手順を正確に記述すべきかと考えます。

`mariadb:10.5`

[code]

    # mysql --version
    mysql  Ver 15.1 Distrib 10.5.15-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
    
[/code]

[code]

    MariaDB [information_schema]> select version();
    +---------------------------------------+
    | version()                             |
    +---------------------------------------+
    | 10.5.15-MariaDB-1:10.5.15+maria~focal |
    +---------------------------------------+
    1 row in set (0.000 sec)
    
[/code]

及び  
`mariadb:10.4.24`

[code]

    # mysql --version
    mysql  Ver 15.1 Distrib 10.4.24-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
    
[/code]

[code]

    MariaDB [information_schema]> select version();
    +---------------------------------------+
    | version()                             |
    +---------------------------------------+
    | 10.4.24-MariaDB-1:10.4.24+maria~focal |
    +---------------------------------------+
    1 row in set (0.000 sec)
    
[/code]

で確認。

* * *

具体的に回答するにはどのイメージを利用してどう接続しているかといった情報が必要かなと思いますが、一般的な回答としては次のいずれかを採用すれば良いのではないでしょうか。

  * DB名を [接続時のオプション](https://mariadb.com/kb/en/mysql-command-line-client/) (`--database`) か [オプションファイル](https://mariadb.com/kb/en/configuring-mariadb-with-option-files/)で明示する
  * 接続後、[`USE`](https://mariadb.com/kb/en/use/) を用いてデフォルトDBを切り替える


CC BY-SA 4.0
2022-04-26T00:15:41.510
88496
2022-04-27T22:52:33.447
2022-04-27T22:52:33.447
2808
2808
88486
answer