【发布时间】:2016-10-14 13:17:13
【问题描述】:
这个有点奇怪……
有人写了一个我认为不应该工作的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 的了解,这不应该起作用。我错了吗(很可能是这样)
【问题讨论】:
-
你错了。
on子句可以包含对已定义的任何表/子查询的引用。 -
嗯..不知道..谢谢。但是,如果您想在图表上绘制它,则从 2 个(或更多)表到 1 个表中会有线条。但我相信您的说法,它是一个有效的连接。
标签: sql