Соединение влево показывает все данные из таблиц 1 и 2 - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь выполнить левое соединение, чтобы получить все строки из таблицы 1, даже если во второй таблице нет соответствующих им значений.

Мои структуры:

Таблица местоположений:

ID     LocName
1      Trk1
2      Trk2
3      Trk3
4      Unk

Таблица чисел:

ID    PartID   Quantity LocationID
1     1        2        1
2     3        12       2
3     2        6        1
4     6        8        3
5     6        5        1

Я пытаюсь присоединиться, но также делаю запрос по указанному c PartID. Мой запрос:

SELECT   
INV_LOCATIONS.ID AS LocationID,  
INV_LOCATIONS.NAME AS LocationName,  
INV_QUANTITY.QUANTITY AS Quantity  
FROM INV_LOCATIONS  
LEFT JOIN INV_QUANTITY ON INV_LOCATIONS.ID = INV_QUANTITY.LOCATION_ID  
WHERE INV_QUANTITY.PART_ID = 1;

Мой вывод сейчас будет:

ID   LocName   Quantity
1    Trk1      5
3    Trk3      8

Желаемый вывод:

ID   LocName   Quantity
1       Trk1      5
2       Trk2      NULL/0
3       Trk3      8
4       Unk       NULL/0

Я предполагаю, что это потому, что у меня есть WHERE INV_QUANTITY.PART_ID = 1, и это заставляет его быть в таблице количеств. Я должен быть в состоянии проверить, что это находится на правильной части, но как мне также включить это, если это не существует. Я знаю, что раньше делал что-то очень похожее, но не могу вспомнить, какой проект, и поэтому нигде не могу найти код.

1 Ответ

1 голос
/ 28 апреля 2020

Вам необходимо переместить логи фильтрации c в предложение ON:

SELECT il.ID AS LocationID, il.NAME AS LocationName,  
       iq.QUANTITY AS Quantity  
FROM INV_LOCATIONS il LEFT JOIN
     INV_QUANTITY iq
     ON il.ID = iq.LOCATION_ID AND iq.PART_ID = 1;
...