mysql:14823
From: SAKAI Kei <SAKAI Kei <sak2@xxxxxxxxxx>>
Date: Wed, 06 May 2009 14:59:54 +0900
Subject: [mysql 14823] Re: 【初歩的質問】 テーブルを結合するSQL文
坂井です。しまった、ちょっと間違いがありました。 > ----------------------------------- > --方法の一例 > SELECT kumi.name, enji.name, kuda1.name, kuda2.name, kuda3.name > FROM kumi > LEFT OUTER JOIN enji ON (enji.kumi=kumi.no) > LEFT OUTER JOIN kuda kuda1 ON (enji.kuda1 = kuda1.no) > LEFT OUTER JOIN kuda kuda2 ON (enji.kuda2 = kuda2.no) > LEFT OUTER JOIN kuda kuda3 ON (enji.kuda3 = kuda3.no) > WHERE enji.kumi = kumi.no; > ----------------------------------- 最後の WHERE行 は不要です。 (JOIN に移動したあと、消すのを忘れました。。動作としては今回は 組みについては NULL が存在しないので変わりありません) 正しくは以下。 SELECT kumi.name, enji.name, kuda1.name, kuda2.name, kuda3.name FROM kumi LEFT OUTER JOIN enji ON (enji.kumi=kumi.no) LEFT OUTER JOIN kuda kuda1 ON (enji.kuda1 = kuda1.no) LEFT OUTER JOIN kuda kuda2 ON (enji.kuda2 = kuda2.no) LEFT OUTER JOIN kuda kuda3 ON (enji.kuda3 = kuda3.no); +----------+------+--------+--------+--------+ | name | name | name | name | name | +----------+------+--------+--------+--------+ | はな組み | 太郎 | イチゴ | ブドウ | ミカン | | はな組み | 二郎 | ブドウ | リンゴ | ミカン | | にじ組み | 三郎 | ミカン | NULL | NULL | | にじ組み | 四郎 | リンゴ | ミカン | NULL | | そら組み | 五郎 | NULL | NULL | NULL | +----------+------+--------+--------+--------+ 5 rows in set (0.00 sec) #カラム名がたまたまみんな「name」になってしまったので、 #必要に応じて適宜別名をつけてください^^; thank you On Wed, 06 May 2009 13:59:13 +0900 SAKAI Kei <sak2@xxxxxxxxxx> wrote: > 坂井です > > nayaさん、こんにちは。 > まず個人的な意見として言わせていただきたいのですが、質問の内容 > が「初歩的」かどうかの判断ができない状態で「初歩的」と断定する > 姿勢はあまりお勧めできません。 > #ちゃんと考えると、結構難しいですよ、これ。 > > とりあえず一例としてこんな感じでやることができます。 > > ----------------------------------- > --データを作りました: > CREATE TABLE enji (kumi int, name varchar(64), kuda1 int, kuda2 int, > kuda3 int); > CREATE TABLE kuda (no int, name varchar(64)); > CREATE TABLE kumi (no int, name varchar(64)); > INSERT INTO enji VALUES > (1,"太郎",1,2,4),(1,"二郎",2,3,4),(2,"三郎",4,NULL,NULL), > (2,"四郎",3,4,NULL),(3,"五郎",NULL, NULL, NULL); > INSERT INTO kuda VALUES (1,"イチゴ"),(2,"ブドウ"),(3,"リンゴ"),(4,"ミカン"); > INSERT INTO kumi VALUES (1,"はな組み"),(2,"にじ組み"),(3,"そら組み"); > ----------------------------------- > > > ----------------------------------- > --方法の一例 > SELECT kumi.name, enji.name, kuda1.name, kuda2.name, kuda3.name > FROM kumi > LEFT OUTER JOIN enji ON (enji.kumi=kumi.no) > LEFT OUTER JOIN kuda kuda1 ON (enji.kuda1 = kuda1.no) > LEFT OUTER JOIN kuda kuda2 ON (enji.kuda2 = kuda2.no) > LEFT OUTER JOIN kuda kuda3 ON (enji.kuda3 = kuda3.no) > WHERE enji.kumi = kumi.no; > ----------------------------------- > > やりたいことは > 「園児テーブルを中心に、 > このテーブルで 数字になっている部分を他のテーブルを > 参照して名前をひっぱってくる」 > ということだと思うので、考え方としては園児テーブルの四角を > 真ん中に書いて、組みのカラムから組みマスターの四角へ線。 > 果物1のカラムから果物マスターの四角への線。 > 果物2からは、、、、、果物1とは値が違うため↑と同じ果物マスタ > の四角に線を引くわけに行かないですから、別の果物マスタの四角を > 書いて線、、、というように、全部で5個の四角が線で結ばった状態 > を思い浮かべると良いです。ただし NULL があるので単なる結合では > なく外部結合(≒相手がなくても表示)を使うわけです。 > > > SQL、あまり感覚で覚えられるものでもないので、まずは適当なデータ > ベース関連(SQLについてたくさん書かれている本)を3,4冊腰を据えて > 読まれると、かなりいろいろ分かってくると思いますよ^^ > > > thank you > > On Wed, 06 May 2009 13:16:05 +0900 > naya <SNA02388@xxxxxxxxxx> wrote: > > こんにちは。nayaと申します(MySQL 5.0.24)。 > > > > > > 以下のサンプルは、幼稚園児の、氏名と、所属する組みと、 > > 好きな果物(3つまで)を表すものです。 > > > > (1)〜(3)のテーブル及びマスターから、(4)の照会結果が得られる > > SQL文をご教示下さい。 > > > > (1) 園児テーブル > > 組み 氏名 果物1 果物2 果物3 > > 1 太郎 1 2 4 > > 1 二郎 2 3 4 > > 2 三郎 4 NULL NULL > > 2 四郎 3 4 NULL > > 3 五郎 NULL NULL NULL > > > > (2) 果物マスター > > 果物番号 果物名 > > 1 イチゴ > > 2 ブドウ > > 3 リンゴ > > 4 ミカン > > > > (3) 組みマスター > > 組み番号 組み名 > > 1 はな組み > > 2 にじ組み > > 3 そら組み > > > > (4) 期待する照会結果 > > はな組み 太郎 イチゴ ブドウ ミカン > > はな組み 二郎 ブドウ リンゴ ミカン > > にじ組み 三郎 ミカン NULL NULL > > にじ組み 四郎 リンゴ ミカン NULL > > そら組み 五郎 NULL NULL NULL > > > > なお、当方で考えた以下のSQLを実行すると、 > > 指数乗に大量な照会結果が得られてしまいます。 > > > > select * from 園児テーブル, 果物マスター, 組マスター > > where 園児テーブル.組み = 組みマスター.組み番号 > > and 園児テーブル.果物1 = 果物マスター.果物番号 > > and 園児テーブル.果物2 = 果物マスター.果物番号 > > and 園児テーブル.果物3 = 果物マスター.果物番号 > > > > > > 当方、DBは、MS ACESSを使った経験もほとんどないですが、 > > MySQL5+PHP5でごく簡単なプログラムを作って勉強中の初心者レベルです。 > > よろしくお願い致します。 > > > > -- > > naya, > > sna02388@xxxxxxxxxx >
14819 2009-05-06 13:16 [naya <SNA02388@xxxxx] 【初歩的質問】 テーブルを結合するSQL文 14820 2009-05-06 13:59 ┣[SAKAI Kei <sak2@xxxx] -> 14823 2009-05-06 14:59 ┃┗[SAKAI Kei <sak2@xxxx] 14824 2009-05-06 20:26 ┃ ┗[naya <SNA02388@xxxxx] 【御礼】 Re: 【初歩的質問】 テーブルを結合するSQL文 14826 2009-05-07 01:18 ┃ ┗["Kaname Kuji\(Y7\)" ] 【蛇足】Re: 【御礼】 Re: 【初歩的質問】 テーブルを結合するSQL文 14825 2009-05-07 00:55 ┗["F.Yamazaki" <fumihi] SQL文、お知恵を拝借させてください 14827 2009-05-07 02:07 ┣[あきら <akirainfoml@] 14829 2009-05-07 02:48 ┃┗["F.Yamazaki" <fumihi] 14830 2009-05-07 11:07 ┃ ┗["Kaname Kuji\(Y7\)" ] 14834 2009-05-07 20:09 ┃ ┗[あきら <akirainfoml@] 14828 2009-05-07 02:12 ┗[とみたまさひろ <tomm]