2013-06-11 41 views
-2

請參考下面的SQL DDL:不確定有關SQL右連接

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。

+2

如果您選擇tableb。*(其中只有(1,1)),結果如何爲「2 3」? – Blorgbeard

+3

http://sqlfiddle.com/#!3/bc68c/1 < - 我的結果不同。 – Blorgbeard

+1

aviod右連接,它們可以被重寫爲左連接,它使得它更易於閱讀和理解 – exussum

回答

2

我不完全確定你想要做什麼,但也許你有從tableb選擇錯字?如果你改變它從表C中選擇:

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

,從表C,你說你最初的預期返回每一行。

+0

我編輯了這個問題。你能再看一次嗎?謝謝。 – w0051977