子查询或两个连接

时间:2013-10-03 19:41:23

标签: sql sql-server

我有三张桌子:

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

我需要加入nametbl_name的{​​{1}}列。直接内部联接不起作用,因为我需要tbl_trans作为中间人来返回此内容:

primary_id

最好的方法是什么?我使用子查询但不确定是否有更直接的声明。

(旁注:这些都不是我的架构。不幸的是,我不能以任何方式修改设计。)

1 个答案:

答案 0 :(得分: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_id中的tbl_primary_idtrans_id中的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