sql join加入3个表

时间:2016-06-14 00:48:21

标签: sql

这个有点奇怪......

有人写了一个在我看来不应该工作的SQL,但确实如此,它也会返回正确的结果。我写了一个简化的例子,但我认为它表明了这一点。

drop table #client;
drop table #transactions;
drop table #history;

create table #client (
    clientId int,
    name varchar(50)
);
create table #transactions (
    transid int,
    clientId int,
    Amount int
);
create table #history (
    transid int,
    Amount int
);

insert into #client values (1, 'User 1');
insert into #client values (2, 'User 2');
insert into #client values (3, 'User 3');

insert into #transactions values (1, 1, 50);
insert into #transactions values (2, 1, 35);
insert into #transactions values (3, 1, 25);

insert into #transactions values (4, 2, 10);
insert into #transactions values (5, 2, 50);
insert into #transactions values (6, 1, 35);
insert into #transactions values (7, 3, 25);
insert into #transactions values (8, 3, 10);

insert into #history values (1, 50);
insert into #history values (2, 35);
insert into #history values (3, 25);
insert into #history values (4, 10);
insert into #history values (5, 50);
insert into #history values (6, 35);
insert into #history values (7, 25);
insert into #history values (8, 10);

select * from #history
join #transactions on #history.transid = #transactions.transid
join #client on #transactions.clientId = #client.clientId and #history.transid = #transactions.transid

最后一个连接在一个连接中将3个表连接在一起,这不应该与我所知的编写SQL有关。我错了(情况可能就是这样)

1 个答案:

答案 0 :(得分:1)

为什么你认为它不起作用? 查询的最后一点是没有意义的,你可以把它拿出来。它是3个表的简单连接:

select * from #history
join #transactions on #history.transid = #transactions.transid
join #client on #transactions.clientId = #client.clientId