-2

请参阅下面的 SQL DDL:

create table tablea (id int identity, name varchar(30))
create table tableb (id int identity, wid int, rid int)
create table tablec (id int)

insert into tablea(name) values ('ian')
insert into tableb(wid,rid)values (1,1)
insert into tablec values(1)
insert into tablec values(2)
insert into tablec values(3)

以及下面的 SQL 语句:

select tablea.* from tablea
left join tableb on tablea.id=tableb.wid
right join tablec on tablea.id=tablec.id

我不确定这会发生什么。结果是:

2
3

我最初期待三个结果。为什么会有两个结果?我意识到这是一个基本问题,但我以前没有使用过这样的 SQL 语句。

我期望三行的原因是因为以下查询返回一行:

select tablea.* from tablea
left join tableb on tablea.id=tableb.wid

以下查询返回两行:

select tablea.* from tablea
right join tablec on tablea.id=tablec.id

和 2+1=3。

4

1 回答 1

2

我不完全确定您要做什么,但也许您在从 tableb 中选择时有错字?如果将其更改为从 tablec 中选择:

select tablec.* from tablea
left join tableb on tablea.id=tableb.wid
right join tablec on tablea.id=tablec.id

正如您最初预期的那样,从 tablec 返回每一行。

于 2013-06-11T22:22:28.580 回答