mysql:8465
From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Wed, 10 Dec 2003 07:50:04 +0900
Subject: [mysql 08465] Re: フィールドの値をフィールドにする
川合孝典です。 ----- Original Message ----- From: "tani" <tanitani@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Wednesday, December 10, 2003 1:22 AM Subject: [mysql 08463] Re: フィールドの値をフィールドにする > すみません。件名を付け忘れました。 > On Wed, 10 Dec 2003 01:06:56 +0900, tani wrote: > > はじめまして。大谷と申します。 (中略) > > --------心配な点--------------------------------------- > > ・SQLってこんな使い方をするのか(アプリケーションで > > 解決すべき問題なのか) 今のテーブル設計からすれば"基本的には"問題ないんじゃないかと 思います。 なんで"基本的には"とつけたかといえば、今のままでは T1、T2は工程名を返してしまいますから CREATE temporary table T1 as SELECT 仕事ID, 期限 as "受注" FROM 工程テーブル WHERE 工程名 = "受注"; のように期限を返す必要があるでしょう(T2についても同様) 下記「試してみたSQL」をご覧ください。 > > ・そもそもデータベースの設計が悪いのか 今あるテーブルそのものが、すぐに何か問題があるようには 思いませんでした。 #個人的にはT1、T2、漢字のテーブル名、カラム名って、どうかとは #思いますが... ただ全体としての良い/悪いは大谷さんが、どんな管理をしたい のかによるでしょう。 私としては、「受注」「納品」を他の工程と一緒にしていいのか 気になります。私には受注の「期限」っていうものがピンときま せんし、受注や納品がない仕事を管理したいのかどうか。 営業管理のようなものなら受注までの活動が必要でしょうし、 受注したものの納品がないっていうものどうかなと。 #「それでいいんだ」ってことであれば、構いませんけども。 =試してみた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 レファレンス・マニュアルを日本語に翻訳出来る方を募集