SQL Full Join,不返回所有行

时间:2014-06-25 08:31:39

标签: sql sql-server join

我正在尝试返回完整的类别列表和任何相关产品(请注意,即使没有产品,我也需要恢复所有类别)

technet说:'要通过在连接结果中包含不匹配的行来保留不匹配的信息,请使用完整的外连接。'

所以我认为下面的查询可以解决问题:

Select * from category 
full outer join product
on category.categoryName = product.categoryName

类别表

ID  categoryName
1   Plumbing
2   Electrics
3   Roofing

产品表(注意这实际上有15个额外的列)

ID  productName categoryName
1    pipe        plumbing
2    plug         Electrics
3    Drill  
4    washer        plumbing

想要的结果集:

ID  categoryName    productName
1   Plumbing    pipe
2   Electrics   plug
3   Roofing     Null
4   Plumbing    washer

目前的结果

ID  categoryName    productName
1   Plumbing    Null
2   Electrics   Null
3   Roofing         Null

在实际数据中有20个类别,我总是得到20行,我有效地获取了类别表,其中包含右侧产品表中的列,但是所有空值。

2 个答案:

答案 0 :(得分:2)

我强烈认为来自categoryName的{​​{1}}和来自Category Table的{​​{1}}内的值不一致。

我现在无法解释此问题,因为我尝试使用您提供的示例值重现您的问题。 (见fiddle)。

我建议您针对两者运行一个选择,以查看是否还有其他categoryName我们在这里看不到。

这样的东西

Product Table

whitespaces使这些可见。

编辑:啊,一开始没想到,但检查两个字段长度是否相同的显而易见的方法当然是SELECT REPLACE(categoryName, ' ', '-') FROM CategorySELECT REPLACE(categoryName, ' ', '-') FROM Product

答案 1 :(得分:-1)

尝试,

您的产品表没有类别但您匹配 product.category

on category.categoryName = product.categoryName