人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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行分しか取って来れないように
思うのですが、間違っているのでしょうか?

よろしくお願いします。

●質問者: mekpsy
●カテゴリ:コンピュータ
✍キーワード:SQL 普通に
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pinkymonk
●35ポイント

こういう場合は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行とれるかと思います。

◎質問者からの返答

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

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

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


2 ● chuken_kenkou
●35ポイント

(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
 
◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ