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
感谢您的帮助...
答
使用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
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
使用LEFT JOIN而不是INNER JOIN。 –
@KamilG。哇!伟大的人......我错过了。非常感谢。谢谢。 – Tres