SQL Left Outer Joins显示Null

时间:2015-07-23 10:50:16

标签: sql join

我已尽最大努力寻找这个问题的一些指导,但似乎我的有点具体。

我有以下SQL查询,它是一个简单的连接,我认为应该可以使用,但是当我尝试从连接表中显示NULL字段时,它会将每条记录显示为{{ 1}}。我希望有人能够就问题可能存在的地方给我一些指导。

所以我的方案是,一个Sales People表及其相关详细信息,然后是Region Lookup表...

tblSalesPerson

ID SPCode CommonName Region
1  bloggsj Joe Bloggs PCNW
2  smiths  Sally Smith PCNE

tblRegionLookup

ID Region Description
----------
1  PCNW  North West
2  PCNE  North East

所以我试图写的查询是.....

SELECT 
    sp.ID, sp.Spcode, sp.CommonName, rl.Description
FROM 
    tblSalesPerson AS sp
LEFT OUTER JOIN 
    tblRegionLookup AS rl ON sp.Region = rl.Region
ORDER BY sp.CommonName asc

结果应该是......

ID SPCode CommonName Description
----------
1  bloggsj Joe Bloggs North West
2  smiths  Sally Smith North East

但是每个字段中的Description字段都是NULL。

我已经检查过文本后面没有空格字符,它们都是varchar(10)字段,并且我还重建并重新组织索引以防它们导致问题。 tblSalesPerson上的ID字段是主键,tblRegionLookup上的Region字段是主键。

任何人都可以看到我可能缺少的东西吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的查询是:

SELECT sp.ID, sp.Spcode, sp.CommonName, rl.Description
FROM tblSalesPerson sp LEFT OUTER JOIN 
    tblRegionLookup rl 
    ON sp.Region = rl.Region
ORDER BY sp.CommonName asc;

如果rl.DescriptionNULL,则表格之间不匹配。问题是" PCNW"在第一个表中不匹配" PCNW"在第二。可能的原因是名称中的空格。您可以通过执行以下操作来测试:

    ON replace(sp.Region, ' ', '') = replace(rl.Region, ' ', '')

如果这不起作用,那么该字段中可能还有其他字符,这些字符要么不可见,要么不匹配。

但是,这不是解决您真正问题的方法。真正的问题是你有一个外键关系,但你没有使用主键。如果您使用数字主键,则此问题将不存在。

因此,修改tblSalesPerson以获得RegionLookupId列,这是一个整数,并引用tblRegionLookup(id)