0

私は3つのテーブルを持っています:

tbl_trans
trans_id volume
a        10
b        20
c        30

tbl_primary_id
trans_id  primary_id
a         QQQ
b         b
c         RRR

tbl_name
trans_id   name
a          Billy
QQQ        Tom
b          Lizzy
RRR        Peter

からまでのname列に参加する必要があります。仲介者としてこれを返す必要があるため、まっすぐな内部結合は機能しません。tbl_nametbl_transprimary_id

trans_id  tbl_name.trans_id volume  name
a         QQQ               10      Tom
a         QQQ               10      Billy
b         b                 20      Lizzy 
c         RRR               30      Peter

これを行う最善の方法は何ですか?サブクエリを使用していましたが、より直接的なステートメントがあるかどうかはわかりませんでした。

(補足: これは私のスキーマではありません。残念ながら、デザインを変更することはできません。)

4

1 に答える 1

2

2つだけ参加

select tt.trans_id, tn.trans_id, tt.volume, tn.name
from tbl_trans tt
inner join tbl_primary_id tti on tti.trans_id = tt.trans_id
inner join tbl_name tn on tn.trans_id = tti.primary_id

ところで、あなたの列の命名は少し奇妙です: primary_idinはintbl_primary_idに関連していますtrans_idtbl_name

ああ、私は何かを逃したようです:

select tt.trans_id as tid, tti.primary_id as tid2, tt.volume, tn.name
from tbl_trans tt
inner join tbl_primary_id tti on tti.trans_id = tt.trans_id
inner join tbl_name tn on tn.trans_id = tti.primary_id or tn.trans_id = tti.trans_id

sqlfiddleを参照してください

于 2013-10-03T19:45:19.667 に答える