我正在尝试返回完整的类别列表和任何相关产品(请注意,即使没有产品,我也需要恢复所有类别)
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行,我有效地获取了类别表,其中包含右侧产品表中的列,但是所有空值。
答案 0 :(得分:2)
我强烈认为来自categoryName
的{{1}}和来自Category Table
的{{1}}内的值不一致。
我现在无法解释此问题,因为我尝试使用您提供的示例值重现您的问题。 (见fiddle)。
我建议您针对两者运行一个选择,以查看是否还有其他categoryName
我们在这里看不到。
像
这样的东西 Product Table
和
whitespaces
使这些可见。
编辑:啊,一开始没想到,但检查两个字段长度是否相同的显而易见的方法当然是SELECT REPLACE(categoryName, ' ', '-') FROM Category
(SELECT REPLACE(categoryName, ' ', '-') FROM Product
)
答案 1 :(得分:-1)
尝试,
您的产品表没有类别但您匹配 product.category
on category.categoryName = product.categoryName