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行分しか取って来れないように
思うのですが、間違っているのでしょうか?
よろしくお願いします。
こういう場合は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行とれるかと思います。
(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
お返事遅くなり申し訳ありません。
上記のように実機がないので試せませんができそうですね。
会社に行ける様になったら試して見ます。
お二方ありがとうございました。
すみません、風邪で寝込んでました。
実機がそばにないので、今試せませんが、出来そうですね。
UNIONなんて存在を忘れていました。