2012-06-18 62 views
-1

請幫我加入命令的結果(MS SQL):加入SQL結果

SELECT name,value FROM table1 WHERE idfoo1 IN(SELECT _id FROM table3 where id = 1); 
SELECT value FROM table2 WHERE idfoo2 IN(SELECT _id_2 FROM table3 where id = 1) AND name='fooname'; 

我也得到:

name value 
John 2  
Bill 32  
Alex 11 

value 
434 
234 
144 

但我需要加入的結果。 !

name value value 
John 2  434 
Bill 32 234 
Alex 11 144 

所以,ID == ID,_id = _id_2,

回答

3

使用此查詢:

SELECT t1.name, 
     t1.value, 
     t2.value 
FROM table1 t1 
INNER JOIN table3 t3 ON t1.idfoo1 = t3._id 
INNER JOIN table2 t2 ON t2.idfoo2 = t3._id_2 
WHERE t3.id=1 AND t2.name = 'fooname' 
+0

這應該被刪除「WHERE t3.id = 1和t2.name ='fooname'」 – mcuw

+0

@mcuw按預期移除。 –

+0

我實際上首選篩選器作爲where子句中的篩選器,因爲它們在技術上不是加入標準。 –

1
Select a.name,a.value,c.value FROM table1 as a inner join table3 as b 
on a.idfoo1=b.id and b.id=1 inner join table3 as c 
on c.idfoo2=b._id_2 and b.id=1 and c.name='fooname' 
-2

我想這就是你需要 -

SELECT t1.name, t1.value, t2.value 
FROM table1 t1, table2 t2, table3 t3 
WHERE 
    t1.idfoo1 = t3._id 
    AND t2.idfoo2 = t3._id_2 
    AND t3.id = 1 
    AND t2.name='fooname'; 
+0

誰在投票?它甚至不解析,它使用的是遠離最佳實踐的舊式聯接。 –

+0

我不同意你的「舊式加入」思想觀點。目前已經有100多個討論圍繞這一點展開,沒有確切的結論。內部連接的唯一理由是它將'連接標準'與'where子句'分開。我同意內部連接在非常複雜的查詢情況下更具可讀性。除此之外,兩者之間沒有性能差異,並且我個人更喜歡在簡單連接中使用隱式連接來簡化查詢。這取決於個人喜好,哪個人使用。 – Kshitij

+0

舊式連接的危險在於,無意中派生笛卡爾產品變得更加容易,正是因爲連接標準和過濾標準被壓縮在一起。如果您必須向查詢添加左連接,現在您必須處理混合樣式的查詢。爲什麼不一直使用更現代的風格呢?保存14個字符真的讓你的查詢更簡單嗎?閱讀[此博客文章](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)。 –