LEFT OUTER JOIN не всегда совпадает - PullRequest
0 голосов
/ 21 сентября 2018

Я начинаю с SQL-запроса с пары соединений и получаю точные данные, которые ожидаю.Это и есть текущий запрос.

SELECT DISTINCT o.OrganizationHierarchyUnitLevelFourCd, o.OrganizationHierarchyUnitLevelThreeNm, o.OrganizationHierarchyUnitLevelFourNm
FROM Lab_Space l
JOIN Worker w ON l.Contact_WWID = w.WWID AND w.Employee_Status_Code = 'A'
JOIN Org_Hierarchy o ON o.OrganizationHierarchyUnitLevelThreeNm IS NOT NULL AND w.Org_Hierarchy_Unit_Cd = o.OrganizationHierarchyUnitCd
ORDER BY o.OrganizationHierarchyUnitLevelThreeNm, o.OrganizationHierarchyUnitLevelFourNm

Это заканчивается строкой, подобной

1234 |Финансы |IT

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

SELECT DISTINCT o.OrganizationHierarchyUnitLevelFourCd, o.OrganizationHierarchyUnitLevelThreeNm, o.OrganizationHierarchyUnitLevelFourNm, v.Include
FROM Lab_Space l
JOIN Worker w ON l.Contact_WWID = w.WWID AND w.Employee_Status_Code = 'A'
JOIN Org_Hierarchy o ON o.OrganizationHierarchyUnitLevelThreeNm IS NOT NULL AND w.Org_Hierarchy_Unit_Cd = o.OrganizationHierarchyUnitCd
LEFT OUTER JOIN Validation_Email_Org_Unit_Inclusion v ON o.OrganizationHierarchyUnitCd = v.OrganizationHierarchyUnitCd
ORDER BY o.OrganizationHierarchyUnitLevelThreeNm, o.OrganizationHierarchyUnitLevelFourNm

У меня проблема в том, чтотеперь я получаю строки вроде:

1234 |Финансы |IT |NULL
1234 |Финансы |IT |1

Поскольку таблица Validation_Email_Org_Unit_Inclusion включает 1 для организации 1234, я ожидаю получить только одну строку со значением 1, не включая строку с NULL.

Что я сделал не так?

1 Ответ

0 голосов
/ 21 сентября 2018

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

SELECT DISTINCT o.OrganizationHierarchyUnitLevelFourCd, ...
...
LEFT OUTER JOIN Validation_Email_Org_Unit_Inclusion v ON o.OrganizationHierarchyUnitLevelFourCd = v.OrganizationHierarchyUnitCd
...
...