2016-09-17 43 views
0

假設我有2個表:SQL Server 2008中從另一個表保留從非匹配值的錶行

FRUITS   RECIPE 
-----------  ----------------- 
id name   ver id1  id2 
-----------  ----------------- 
1 apple  1  1  1 
2 banana  2  null 3 
3 orange  3  3  3 
4 peach  4  4  2 
       5  1  null 
       6  null null 

爲了返回ID1和ID2值的名字我想:

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE INNER JOIN FRUITS AS F1 ON id1 = F1.name 
      INNER JOIN FRUITS AS F2 ON id2 = F2.name 

返回:

------------------------------------ 
ver id1  name  id2 name 
------------------------------------ 
1  1  apple  1  apple 
3  3  orange  3  orange 
4  4  peach  2  banana 

我想作爲所示的結果集包括所有食譜行,包括空值:

------------------------------------ 
ver id1  name  id2  name 
------------------------------------ 
1  1  apple  1  apple 
2  null null  3  orange 
3  3  orange 3  orange 
4  4  peach  2  banana 
5  1  apple  null null 
6  null null  null null 

感謝您的幫助...

+0

使用LEFT JOIN而不是INNER JOIN。 –

+0

@KamilG。哇!偉大的人......我錯過了。非常感謝。謝謝。 – Tres

回答

0

使用LEFT JOIN而不是INNER JOIN保留通過RECIPE表生成的整個輸出與FRUITS檢索的附加信息:

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE 
LEFT JOIN FRUITS AS F1 ON id1 = F1.name 
LEFT JOIN FRUITS AS F2 ON id2 = F2.name 

Quote

LEFT JOIN關鍵字返回左表(table1)中的所有行,右表中的匹配行(table2)。沒有匹配時,右側的結果爲NULL。

0

您需要使用外連接,例如,

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE LEFT OUTER JOIN FRUITS AS F1 ON id1 = F1.name 
      LEFT OUTER FRUITS AS F2 ON id2 = F2.name 
+0

非常感謝。太糟糕了,我只能給1回答信貸... – Tres

2

用戶外連接喜歡 -

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE 
LEFT JOIN FRUITS F1 
ON id1 = F1.id 
LEFT JOIN FRUITS F2 
ON id2 = F2.id 

在您的查詢,你是比較id來fruits'name,這是不對的。

+0

感謝男人的幫助。 – Tres

相關問題