Sql 子查询或两个联接
我有三张桌子:Sql 子查询或两个联接,sql,sql-server,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 我需要将name列从
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\u name
添加到tbl\u trans
。直接内部联接不起作用,因为我需要primary\u 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
最好的方法是什么?我使用的是子查询,但不确定是否有更直接的语句
(旁注:这些都不是我的模式。不幸的是,我无法以任何方式修改设计。)只有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
顺便说一下,您的列命名有点奇怪:tbl\u primary\u id
中的primary\u id
与tbl\u name中的trans\u id
相关
哦,好像我错过了什么:
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
请参见您确定这会起作用吗?如果没有与trans\u id匹配的主id(即使名称表中有trans\u id),那么内部连接不会起作用吗?@JeffreyKramer,这还不是很清楚。第二个答案(和sqlfiddle)应该会为您的示例数据提供所需的结果……谢谢,我从来没有意识到您可以使用或类似的方法。很高兴知道。