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/hippo2000、http://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 レファレンス・マニュアルを日本語に翻訳出来る方を募集