Sql server 为3列查询结果提供空值,其中内部联接可能不返回任何结果
我的目标是得到一个库存盘点表,包括许多零件。结果表将包含零件名称、零件位置和计数。我有四张桌子:Sql server 为3列查询结果提供空值,其中内部联接可能不返回任何结果,sql-server,Sql Server,我的目标是得到一个库存盘点表,包括许多零件。结果表将包含零件名称、零件位置和计数。我有四张桌子: 库存-列出所有库存id partType\U id PartTypes-库存id partName中可能包含的零件类型 零件位置-零件类型与其存储位置之间的关联位置id零件类型id 位置-零件id nanme的所有位置列表 我在查询中遇到的问题是,我正在测试的部分的子集没有位置,因此查询没有返回任何结果。我想为找不到位置的任何零件的位置提供“NULL”。我看到了可以使用嵌套SELECT返
- 库存-列出所有库存id partType\U id
- PartTypes-库存id partName中可能包含的零件类型
- 零件位置-零件类型与其存储位置之间的关联位置id零件类型id
- 位置-零件id nanme的所有位置列表
SELECT PT.partName AS part_name, L.name AS part_location, COUNT(I.id) AS part_count
FROM Location L
INNER JOIN Part_Location PL ON PL.Location_id = L.id
INNER JOIN PartTypes PT ON PT.id = PL.partType_id
INNER JOIN Inventory I ON I.partType_id = PT.id
GROUP BY L.name, PT.partName
我希望看到的结果是:
part_name part_location part_count part-1
null 100 part-2 null 15
等等。使用
左联接
而不是内部联接
来引入可能没有匹配记录的表。在本例中,这也意味着首先列出不同的表
选择PT.partName作为零件名称,L.name作为零件位置,计数(I.id)作为零件计数
来自零件类型PT
内部连接零件位置PL上的PL.PARTYPE\U id=PT.id
L.id上的左连接位置L=PL.Location\U id
I.partType\u id=PT.id上的内部联接库存I
按L.name、PT.partName分组
如果一个零件可能没有位置,为什么不使用左联接
?我们需要一些具有匹配预期结果的样本数据,以便正确理解您试图实现的目标。我可能在零件位置表中遗漏了一个关于完全不匹配的详细信息。我将内部连接零件位置更改为左连接零件位置,并得到了我要查找的结果。谢谢