Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 子查询或两个联接_Sql_Sql Server - Fatal编程技术网

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)应该会为您的示例数据提供所需的结果……谢谢,我从来没有意识到您可以使用或类似的方法。很高兴知道。