重要なお知らせ

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

電子書籍の厳選無料作品が豊富!

Aテーブル{
id char(3) not null,
name varchar(10),
a_no char(5),
b_no char(5),
c_no char(5),
date timestamp
}

Bマスタ{
no char(5),
name char(10)
}

上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。


下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。

A.id,
A.name,
A.a_no,
カラム名をname1としてB.name,
b_no,
カラム名をname2としてB.name,
c_no,
カラム名をname3としてB.name

そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。
よろしくお願いします。

A 回答 (2件)

エイリアスをつかって同じテーブルをJOINして


いけばよいです。

SELECT `id`
,A.`name`
,`a_no`
,B1.`name` AS name1
,`b_no`
,B2.name AS name2
,`c_no`
,B3.name AS name3
FROM `Aテーブル` AS A
INNER JOIN `Bマスタ` AS B1 ON B1.`no`=A.`a_no`
INNER JOIN `Bマスタ` AS B2 ON B2.`no`=A.`b_no`
INNER JOIN `Bマスタ` AS B3 ON B3.`no`=A.`c_no`
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
INNER JOINをこのように使用すればよかったのですね。
すっきりしました!

ありがとうございます。

お礼日時:2006/07/12 10:24

これでどうでしょう


SELECT A.id,A.name,A.a_no,B.name name1,b_no,B.name name2,c_no,B.name name3
FROM A,B
WHERE A.a_no = B.no
OR A.b_no = B.no
OR A.c_no = B.no

この回答への補足

ご回答ありがとうございます。
この方法だと
B.name name1
B.name name2
B.name name3
もwhere句の条件からみて同様になってしまいます。

取得したいものは
【Aテーブル】
100 Aクラス 001 002 003 20060711
200 Bクラス 002 008 004 20060711
300 Cクラス 005 006 007 20060711
400 Dクラス 004 009 003 20060711

【Bテーブル】
001 山田
002 鈴木
003 滝田
004 小林
005 小暮
006 木下
007 神田
008 相田
009 小川

【取得後】
100 Aクラス 001 山田 002 鈴木 003 滝田 20060711
200 Bクラス 002 鈴木 008 相田 004 小林 20060711
300 Cクラス 005 小暮 006 木下 007 神田 20060711
400 Dクラス 004 小林 009 小川 003 滝田 20060711

補足日時:2006/07/12 10:22
    • good
    • 0

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

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