TSQL同表多连接:如何返回Store表中OwnerID/GMID为NULL的行
解决Store表中OwnerID/GMID为NULL的行无法返回的问题
嘿,我来帮你搞定这个问题!
你当前用的是标准的内连接(JOIN),这种连接方式只会返回两个表中能完美匹配连接条件的行。当Store表的OwnerID或者GMID是NULL的时候,根本没法和Employee表的EmployeeID匹配上,所以这些带NULL的行就被自动过滤掉了——这就是你看不到它们的核心原因。
要把这些行找回来,只需要把两个JOIN都改成**左连接(LEFT JOIN)**就行。左连接的特性是会保留左表(这里就是Store表)的所有记录,哪怕右表(Employee)没有对应的匹配项,这时候右表的关联字段就会显示为NULL。
修正后的完整查询语句如下:
SELECT b.FirstName + space(1) + b.LastName AS OwnerName, c.FirstName + space(1) + c.LastName AS GeneralManager FROM Store a LEFT JOIN Employee b ON a.OwnerID = b.EmployeeID LEFT JOIN Employee c ON a.GMID = c.EmployeeID
简单拆解下修改点:
- 第一个
LEFT JOIN:确保Store表中所有OwnerID为NULL的行都被保留,对应的OwnerName字段会显示为NULL - 第二个
LEFT JOIN:同理,保留GMID为NULL的行,GeneralManager字段显示为NULL
这样修改后,就能完整返回你需要的所有行啦!
内容的提问来源于stack exchange,提问作者Chris Catignani
相关产品推荐
相关产品推荐

