SQLについての質問です。


INNER JOINで結合をするのですが、結合する表から2行分持ってくるようなSQLはどう書けば
いいのでしょうか?

{
id int(6)
・・・・・・・・・・・・・・
lineCode1 varchar(4),
stationCode1 varchar(4),
lineCode2 varchar(4),
stationCode2 varchar(4),
・・・・・・・・・・・・・・
}

のようなテーブルAと、

{
id int(6)
・・・・・・・・・・・・・・
lineCode varchar(4),
stationCode varchar(4),
lineName varchar(255),
stationName varchar(255),
・・・・・・・・・・・・・・
}

のようなテーブルBがあったとき、

結合の結果、テーブルBから2行分のlineNameとstationNameを取ってくるSQLは
どう書くのでしょうか?

{
id int(6),
・・・・・・・・・・・・・・・・・・・
lineName1 varchar(255),
stationName1 varchar(255),
lineName2 varchar(255),
stationName2 varchar(255),
・・・・・・・・・・・・・・・・・・・
}

のような結果が得たいのです。普通に結合すると1行分しか取って来れないように
思うのですが、間違っているのでしょうか?

よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2008/12/11 11:20:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:pinkymonk No.1

回答回数173ベストアンサー獲得回数14

ポイント35pt

こういう場合はUNIONを使えないと取れないと思います。


Select * from テーブルA INNER JOIN テーブルB ON テーブルA.lineCode1 = テーブルB.lineCode AND テーブルA.stationCode = テーブルB.stationCode1

UNION

Select * from テーブルA INNER JOIN テーブルB ON テーブルA.lineCode2 = テーブルB.lineCode AND テーブルA.stationCode = テーブルB.stationCode2


これで2行とれるかと思います。

id:mekpsy

すみません、風邪で寝込んでました。

実機がそばにないので、今試せませんが、出来そうですね。

UNIONなんて存在を忘れていました。

2008/12/09 12:59:11
id:chuken_kenkou No.2

回答回数722ベストアンサー獲得回数54

ポイント35pt

(lineCode,stationCode)の複合キーで、一意になるのでしょうか?

テーブルAに対し、テーブルBを2回結合します。

実機確認していませんが、次のような感じです。


SELECT  
   B1.lineName as lineName1,
   B1.stationName as stationName1,
   B2.lineName as lineName2,
   B2.stationName as stationName2
 FROM テーブルA AS A
    INNER JOIN テーブルB AS B1 ON A.lineCode1=B1.lineCode AND A.stationCode=B1.stationCode
    INNER JOIN テーブルB AS B2 ON A.lineCode2=B2.lineCode AND A.stationCode=B2.stationCode
 
id:mekpsy

お返事遅くなり申し訳ありません。

上記のように実機がないので試せませんができそうですね。

会社に行ける様になったら試して見ます。

お二方ありがとうございました。

2008/12/09 13:01:32
  • id:pahoo
    要件をもう少し具体化する必要があるので、下記の情報を知らせください。

    1)テーブルAとBの結合キーは id ですか?
    2)idはユニークキー(テーブルA、Bの各々において1つしか存在しない)ですか?
    3)lineName1, stationName1, lineName2, stationName2 はテーブルAとBのどちらを指していますか?

    1,2の条件が正しいとすると、テーブルAにしか当該idが無い場合は、3はどのような結果になればいいのでしょうか。
  • id:mekpsy
    すみません、idは適当に書きました。実際の2つのテーブルには、
    お互いに無関係なid的なフィールドを持っています。

    3)については、テーブルBのlineName、stationNameを指しています。
    テーブルBから2行分の情報を得たいので、ナンバリングしたフィールド名にしてます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません