如何处理多个SQL表连接中的NULL值

时间:2013-09-24 15:40:35

标签: sql sql-server sql-server-2005

我有一个SQL查询从四个表中提取数据,但如果第三个表(SC_FeatureCart)中没有数据,则查询不返回任何数据。

我知道包含NULL的列在创建连接时不匹配任何值,因此它们被排除在结果集之外但我仍然希望能够从前两个表,SC_NumberCart和SC_Packages返回值,所以任何人都可以帮忙建议我怎么能实现这个???

我的SQL查询是:

SELECT SC_NumberCart.Number, SC_Packages.PkgName, SC_Features.FeatureName  
FROM SC_NumberCart 
JOIN SC_Packages ON SC_NumberCart.PkgID = SC_Packages.PkgID 
JOIN SC_FeatureCart ON SC_NumberCart.NumberID = SC_FeatureCart.NumberID 
AND SC_NumberCart.RecordID = SC_FeatureCart.RecordID 
JOIN SC_Features 
ON SC_FeatureCart.FeatureID = SC_Features.FeatureID 
WHERE SC_NumberCart.CpyID = @CpyID

如果SC_FeatureCart表中有数据,我可以使用此SQL查询查看并显示结果,如下所示。

<table id="t2">
      <tr>
        <th>Number</th>
        <th>PkgName</th>
        <th>FeatureName</th>
      </tr>
      <tr>
        <td>01157710125</td>
        <td>01 / 02 Medium (Landline)</td>
        <td>Call Whisper</td>
      </tr>
    </table>

非常感谢,

克里斯

2 个答案:

答案 0 :(得分:1)

使用外部联接而不是内部联接

答案 1 :(得分:1)

使用LEFT JOIN表示您希望左表中的结果,即使右表中没有匹配项。

SELECT SC_NumberCart.Number, SC_Packages.PkgName, SC_Features.FeatureName  
FROM SC_NumberCart 
LEFT JOIN SC_Packages ON SC_NumberCart.PkgID = SC_Packages.PkgID 
LEFT JOIN SC_FeatureCart ON SC_NumberCart.NumberID = SC_FeatureCart.NumberID 
                            AND SC_NumberCart.RecordID = SC_FeatureCart.RecordID 
LEFT JOIN SC_Features ON SC_FeatureCart.FeatureID = SC_Features.FeatureID 
WHERE SC_NumberCart.CpyID = @CpyID

Here's a good explanation不同类型的联接。