重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

例えば以下のテーブルがあったとします。

[makerTbl]
| makerKey | maker |
| 1 | トヨタ |
| 2 | 日産 |
| 3 | マツダ |
| 4 | 本田 |

[carsTbl]
| carKey | carName |
| 1 | アルファード |
| 2 | ヴェルファイア |
| 3 | ヴォクシー |
| 4 | エスティマ |
| 5 | フェアレディZ |
| 6 | スカイライン |
| 7 | デミオ |
| 8 | NSX |

[carsMakerTbl]
| key | makerKey | carKey |
| 1 | 2 | 6 |
| 2 | 4 | 8 |
| 3 | 1 | 2 |
| 4 | 1 | 1 |
| 5 | 3 | 7 |
| 6 | 1 | 4 |
| 7 | 2 | 5 |
| 8 | 1 | 3 |

上記のような自動車メーカー(makerTbl)とラインナップ(carsTbl)、それを関連付けるテーブル(carsMakerTbl)が
あったとします。

ここからトヨタのみのデータを以下の形式で欲しい場合

| makerKey | maker | cars |
| 1 | トヨタ | アルファード,ヴェルファイア,ヴォクシー,エスティマ |

select `makerTbl`.*, GROUP_CONCAT( `carsTbl`.`carName` ) as cars
from `makerTbl`
inner join `carsMakerTbl` on `makerTbl`.`makerKey`=`carsMakerTbl`.`makerKey`
inner join `carsTbl` on `carsMakerTbl`.`carKey`=`carsTbl`.`carKey`
where `makerTbl`.`makerKey`=1
group by `makerTbl`.`makerKey`


こんな感じで取得できる思いますが、
上記はメーカーのキーがわかっている場合です。

しかしこの構成で、carKeyのみがわかっていた場合
つまり、where `carKey`.`key`=1
に変更した場合は当然うまくいきません。

所持している情報がcarKeyのみの場合にも同じような形式で取得できる方法はないでしょうか?

長々と申し訳ありません。
どうしてもいきずまってしましまして、断念してしましました。宜しくお願いいたします。

A 回答 (2件)

MySQLのバージョンを、少なくもMySQL 4.1、5.0、5.1といったレベルまで最低限提示してください。


テーブルの関係、列の意味といったことも説明するようにしてください。

細かく見ていませんが、MySQL 4.1以降なら、「carkeyからmakerkeyを得て、、、」といったサブクエリを追加すればいいのでは?
    • good
    • 0
この回答へのお礼

ありがとうございます。
versionは5.0.22となります。
お教えいただいた通りfrom句よりサブクエリにて結果を得ることができました!
ありがとうございます。

お礼日時:2011/03/22 20:17

>つまり、where `carKey`.`key`=1



たんに

where `carsTbl`.`carkey`=1

じゃないのですか?
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。
たしかに自分の例はテーブル名を記載していませんでした;
しかし上記の例の場合で取得できるデータは


| makerKey | maker | cars |
| 1 | トヨタ | アルファード |
となってしまい、車名を指定しているせいか、GROUP_CONCATにてリスト化されません。

お礼日時:2011/03/22 18:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す