0

我有三张桌子:

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_idintbl_primary_idtrans_idin相关tbl_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 回答