質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

1733閲覧

mysqlでVIEW作成時に、カラム定義がbigint(21)になってしまう

OtaMasato

総合スコア44

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2017/11/03 22:26

すみません、mysql(5.1)のVIEW作成時に分からないことがあり、教えてください。

以下の条件でVIEWを作成したところ、name_cntの型がbigint(21)となりました。

SQL

1CREATE VIEW hoge.test_view AS 2select 3 h.name, 4 cast(count(h.name) as signed INTEGER) AS name_cnt 5from hoge.test_tbl h 6group by h.name;

実際の運用では、name_cntのサイズはせいぜい数十~数百程度であり、
bigintはかなり大袈裟です。

VIEWの定義を見た方に誤解を与えそうなので、可能であれば適切な型でVIEWを作成したいのですが、
mysqlにそのようなVIEW定義をすることは可能なのでしょうか。

SMALLINTか、せめてINTであれば違和感はないのですが・・・。

bigintでもVIEWを使う上では特に影響はないのですが、やり方についてご存知の方がおりましたら教えてください。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A.Ichi

2017/11/04 00:11

ただできると言うだけですが、cast(cast(count(name) as decimal(8)) as signed INTEGER) AS name_cnt
OtaMasato

2017/11/06 14:18

ご回答ありがとうございます。つまり、普通にはできないということですよね。承知しました。
guest

回答1

0

ベストアンサー

viewを使う限り、集計結果は未知数ですから保険がかかるのは仕方ないのでは?
どうしても気になるならviewではなくテンポラリテーブルを利用してみてください
ただしテンポラリテーブルも型を指定しなければbigintで処理されます

SQL

1create table test_tbl(id int unique,name varchar(20)); 2insert into test_tbl values(1,'a'),(2,'a'),(3,'b'),(4,'c');
  • viewテスト

SQL

1create view test_view as 2select 3name,count(name) AS name_cnt 4from test_tbl 5group by name; 6 7show columns from test_view;
  • tempraryテスト1

SQL

1create temporary table test_temp 2select 3name,count(name) AS name_cnt 4from test_tbl 5group by name; 6 7show columns from test_temp 8
  • tempraryテスト2
create temporary table test_temp(name varchar(20),name_cnt int) select name,count(name) as name_cnt from test_tbl group by name; show columns from test_temp;

投稿2017/11/06 01:42

yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OtaMasato

2017/11/06 14:23

処理後に消えてしまうのは困るので、tempraryテーブルは使えないです。 オラクルにもcastはありますが、こちらは「CAST(hoge AS VARCHAR(5))」といったように型指定ができます。 mysqlでは無理そうですね。承知しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問