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

mysql:8473

From: tani <tani <tanitani@xxxxxxxxxx>>
Date: Wed, 10 Dec 2003 23:50:43 +0900
Subject: [mysql 08473] Re: フィールドの値をフィールドにする

大谷です。

[snip]
>>>  --------心配な点---------------------------------------
>>>  ・SQLってこんな使い方をするのか(アプリケーションで
>>>   解決すべき問題なのか)
> 今のテーブル設計からすれば"基本的には"問題ないんじゃないかと
> 思います。
> なんで"基本的には"とつけたかといえば、今のままでは
> T1、T2は工程名を返してしまいますから
> 
>  CREATE temporary table T1 as
>      SELECT 仕事ID, 期限 as "受注"
>      FROM   工程テーブル
>      WHERE  工程名 = "受注";
> 
> のように期限を返す必要があるでしょう(T2についても同様)
> 下記「試してみたSQL」をご覧ください。
本来はもっと複雑なDBなのですが、説明しやすくするため
問題が含まれている部分のみを取り出して質問をしたのですが、
SQLを目視でしか確認していなかったため記述ミスをして
しまいました。

>>>  ・そもそもデータベースの設計が悪いのか
> 今あるテーブルそのものが、すぐに何か問題があるようには
> 思いませんでした。
行程名をフィールド名にする点について違和感を感じていたのですが、
大丈夫なようなので、安心しました。

> #個人的にはT1、T2、漢字のテーブル名、カラム名って、どうかとは
> #思いますが...
これも、実際には英語を使用しています。

> ただ全体としての良い/悪いは大谷さんが、どんな管理をしたい
> のかによるでしょう。
> 私としては、「受注」「納品」を他の工程と一緒にしていいのか
> 気になります。私には受注の「期限」っていうものがピンときま
> せんし、受注や納品がない仕事を管理したいのかどうか。
> 営業管理のようなものなら受注までの活動が必要でしょうし、
> 受注したものの納品がないっていうものどうかなと。
> #「それでいいんだ」ってことであれば、構いませんけども。
はい。先にも書きましたが今回は質問用のDBなので、よけいな
問題が入ってしまいました。

今回作成しているDBで、それぞれのテーブルに6万件ほど
データを登録して実行したところ、一時間待っても処理が
終わらず、そこから不安が増大していきました。結局、
テンポラリテーブルにインデックスを付けることで
一秒未満で処理することが出来たのですが、不安が拭えなかった
ため、質問をさせて頂きました。SQLは学び始めて間もない
のですが、過去ログなどを読み、自分なりに知恵を絞って
みました。
実際にSQLを作成・実行されてからの返信など時間の都合もあり
なかなか出来ることではないと思いますが、丁寧なレスを
ありがとうございます。私も見習って質問やレスの時などには
SQL文を記述していこうとおもいます。

ありがとうございました。

> =試してみたSQL=
> CREATE TABLE tblShigoto (
>    SHIGOTOID  INTEGER NOT NULL,
>    SHIGOTOMEI VARCHAR(80),
>    PRIMARY KEY (SHIGOTOID));
> CREATE TABLE tblKotei (
>    SHIGOTOID INTEGER NOT NULL,
>    KOTEIMEI  VARCHAR(80) NOT NULL,
>    KIGEN     VARCHAR(20),
>    PRIMARY KEY (SHIGOTOID, KOTEIMEI));
> INSERT INTO tblShigoto VALUES(1, 'A Web作成');
> INSERT INTO tblShigoto VALUES(2, 'B Web作成');
> INSERT INTO tblShigoto VALUES(3, 'C Web作成');
> INSERT INTO tblShigoto VALUES(4, 'D Web作成');
> INSERT INTO tblKotei VALUES(1, '受注', '11.4');
> INSERT INTO tblKotei VALUES(1, '納品', '12.1');
> INSERT INTO tblKotei VALUES(2, '受注', '11.20');
> INSERT INTO tblKotei VALUES(2, '納品', '12.10');
> INSERT INTO tblKotei VALUES(3, '受注', '11.23');
> INSERT INTO tblKotei VALUES(4, '納品', '12.14');
> 
> CREATE temporary table tblJuchu as
>      SELECT SHIGOTOID, KIGEN as JUCHUKIGEN
>      FROM   tblKotei
>      WHERE  KOTEIMEI = '受注';
> ALTER table tblJuchu add index (SHIGOTOID);
> CREATE temporary table tblNohin as
>      SELECT SHIGOTOID, KIGEN as NOHINKIGEN
>      FROM   tblKotei
>      WHERE  KOTEIMEI = '納品';
> ALTER table tblNohin add index (SHIGOTOID);
> 
> SELECT tblShigoto.SHIGOTOMEI as '仕事名',
>        JUCHUKIGEN as '受注',
>        NOHINKIGEN as '納品'
> FROM tblShigoto
>      LEFT JOIN tblJuchu ON
>   tblJuchu.SHIGOTOID = tblShigoto.SHIGOTOID
>      LEFT JOIN tblNohin ON
>   tblNohin.SHIGOTOID = tblShigoto.SHIGOTOID;
> 
> =結果(最後のSELECTのみ)=
> mysql> SELECT tblShigoto.SHIGOTOMEI as '仕事名',
>     ->        JUCHUKIGEN as '受注',
>     ->        NOHINKIGEN as '納品'
>     -> FROM tblShigoto
>     ->      LEFT JOIN tblJuchu ON
>     ->          tblJuchu.SHIGOTOID = tblShigoto.SHIGOTOID
>     ->      LEFT JOIN tblNohin ON
>     ->          tblNohin.SHIGOTOID = tblShigoto.SHIGOTOID;
> +-----------+-------+-------+
>>  仕事名    | 受注  | 納品  |
> +-----------+-------+-------+
>>  A Web作成 | 11.4  | 12.1  |
>>  B Web作成 | 11.20 | 12.10 |
>>  C Web作成 | 11.23 | NULL  |
>>  D Web作成 | NULL  | 12.14 |
> +-----------+-------+-------+
> 4 rows in set (0.00 sec)
> 
> ===================================================
> 川合 孝典 (Hippo2000)
>    DBI日本語メーリングリスト管理人、Kansai.pm所属
>    kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx
>    http://member.nifty.ne.jp/hippo2000http://www.hippo2000.info/
> perldocの日本語情報ならperldocjp:翻訳してみませんか?
>   http://perldocjp.sourceforge.jp/
> ===================================================
> 

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

      8462 2003-12-10 01:06 [tani <tanitani@xxxxx]                                         
      8463 2003-12-10 01:22 ┣[tani <tanitani@xxxxx] Re: フィールドの値をフィールドにする  
      8465 2003-12-10 07:50 ┃┗["KAWAI,Takanori" <GC]                                     
->    8473 2003-12-10 23:50 ┃ ┗[tani <tanitani@xxxxx]                                   
      8464 2003-12-10 01:25 ┗["T.P.S.Nakagawa" <ya]                                       
      8474 2003-12-11 00:05  ┣[tani <tanitani@xxxxx] Re: フィールドの値をフィールドにする
      8487 2003-12-14 09:00  ┗[Kazuhiro Yoshida <mo] enum vs master table (Re: )         
      8490 2003-12-14 09:22   ┣["T.P.S.Nakagawa" <ya]                                   
      8491 2003-12-15 04:36   ┗["zen kishimoto" <zen] MySQL レファレンス・マニュアルを日本語に翻訳出来る方を募集