Укажите нулевое значение для результата запроса с 3 столбцами, где внутреннее соединение может не возвращать результат - PullRequest
0 голосов
/ 12 июля 2020

Моя цель - получить таблицу инвентаризации, состоящую из множества частей. В результирующей таблице будет указано название детали, расположение детали и количество. У меня есть четыре таблицы:

  • Inventory - перечисляет все идентификаторы инвентаря partType_id

  • PartTypes - типы деталей, которые могут быть в инвентаре id partName

  • Part_Location - связь между типом детали и местом, где она хранится Location_id partType_id

  • Location - список всех местоположений для частей id nanme

Проблема, с которой я столкнулся с моим запросом, заключается в том, что подмножество частей, которые я тестирую, не имеют местоположения, поэтому запрос не возвращает результатов. Я хотел бы указать "NULL" для местоположения любой части, где местоположение не найдено. Я видел, где вы можете использовать вложенный SELECT для возврата null, но INNER JOINS сбивает с толку простой пример, который я видел.

Вот мой текущий SQL запрос сервера:

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

What I хотел бы увидеть результат:

part_name        part_location     part_count part-1   
null              100 part-2               null              15

et c.

1 Ответ

0 голосов
/ 12 июля 2020

Используйте LEFT JOIN вместо INNER JOIN для ввода таблиц, которые могут не иметь совпадающих записей. В этом случае это также означает, что сначала будет указана другая таблица.

SELECT PT.partName AS part_name, L.name AS part_location, COUNT(I.id) AS part_count
FROM PartTypes PT 
INNER JOIN Part_Location PL ON PL.partType_id = PT.id
LEFT JOIN Location L ON L.id = PL.Location_id
INNER JOIN Inventory I ON I.partType_id = PT.id
GROUP BY L.name, PT.partName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...