2012-07-20 64 views
0

我有一個父表,有兩個外鍵引用子表。我試圖想出最優的TSQL(SQL Server 2008),它將子列轉移到一行中。表結構和所需的結果集結構如下。做這項工作的最佳方式是什麼?2列SQL Server子查詢最佳

謝謝。

set nocount on 
declare @parent table (parentid int , parentword varchar(3) , childid int , childotherid int) 
insert into @parent values (0 , 'a' , 1 , 3) 
insert into @parent values (1 , 'b' , 2 , 4) 

declare @child table (childid int , childword varchar(3)) 
insert into @child values (1 , 'ppp') 
insert into @child values (2 , 'qqq') 
insert into @child values (3 , 'rrr') 
insert into @child values (4 , 'sss') 


needed result set 
a  ppp  rrr 
b  qqq  sss 

回答

2

它不與父pivoting.Join兩次子表table.See我用左join.If沒有childID的列的父表不null.Then您可以使用內部聯接以及。

select p.parentword,c1.childword,c2.childword from @parent p 
left join @child c1 
on p.childid = c1.childid 
left join @child c2 
on p.childotherid = c2.childid 
+0

我會問一個我覺得不夠具體的問題,但是「是一個左連接比內連接快,因爲我總是希望p.parentword能夠顯示如果childwor爲空「? – Snowy 2012-07-20 19:58:48

+1

然後,你需要左連接,你應該使用that.inner連接和左連接在邏輯上不是等價的,所以比較它們的性能對我來說沒有多大意義。但是,如果內連接優化器比左連接有更多的計劃選擇,可以生成更好的計劃。但它完全依賴於在join中使用的數據和條件。但我不擔心這一點,因爲內部連接不會給我輸出我需要的。 – 2012-07-20 20:07:34

1

嘗試使用
選擇p.parentword,c.childword,c1.childword如從@parent p childotherword
內連接上p.childid @child C = c.childid
內連接@child c1 on p.childotherid = c1.childid