SQL Server 2008中从另一个表保留从非匹配值的表行

问题描述:

假设我有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

使用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。

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

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

用户外连接喜欢 -

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