请参阅下面的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。
答案 0 :(得分:2)
我不完全确定你要做什么,但也许你从tableb中选择了一个错字?如果您将其更改为从tablec中选择:
select tablec.* from tablea
left join tableb on tablea.id=tableb.wid
right join tablec on tablea.id=tablec.id
按照您最初的预期,返回tablec中的每一行。