我已尽最大努力寻找这个问题的一些指导,但似乎我的有点具体。
我有以下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字段是主键。
任何人都可以看到我可能缺少的东西吗?
提前致谢。
答案 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.Description
为NULL
,则表格之间不匹配。问题是" PCNW"在第一个表中不匹配" PCNW"在第二。可能的原因是名称中的空格。您可以通过执行以下操作来测试:
ON replace(sp.Region, ' ', '') = replace(rl.Region, ' ', '')
如果这不起作用,那么该字段中可能还有其他字符,这些字符要么不可见,要么不匹配。
但是,这不是解决您真正问题的方法。真正的问题是你有一个外键关系,但你没有使用主键。如果您使用数字主键,则此问题将不存在。
因此,修改tblSalesPerson
以获得RegionLookupId
列,这是一个整数,并引用tblRegionLookup(id)
。