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的所有位置列表

我在查询中遇到的问题是,我正在测试的部分的子集没有位置,因此查询没有返回任何结果。我想为找不到位置的任何零件的位置提供“NULL”。我看到了可以使用嵌套SELECT返回null的地方,但是内部连接混淆了我看到的简单示例

以下是我当前的SQL Server查询:

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分组

如果一个零件可能没有位置,为什么不使用
左联接
?我们需要一些具有匹配预期结果的样本数据,以便正确理解您试图实现的目标。我可能在零件位置表中遗漏了一个关于完全不匹配的详细信息。我将内部连接零件位置更改为左连接零件位置,并得到了我要查找的结果。谢谢