Хранимая процедура SQL - PullRequest
       1

Хранимая процедура SQL

0 голосов
/ 13 октября 2010

в настоящее время сохраненный процесс возвращает одну запись на основе employee_number, который передается в качестве параметра. Если значение surpervisor_id равно NULL, запись не возвращается. Если я хочу вернуть запись со всеми остальными полями и иметь значение NULL в поле supervisor_id, как мне это настроить?

SELECT DISTINCT 
    tblPeople.PERSON_ID, tblPeople.FIRST_NAME, tblPeople.LAST_NAME, 
    tblPeople.EMPLOYEE_NUMBER, tblPeople.EMAIL_ADDRESS, 
    tblAddress.ADDRESS_LINE1, tblAddress.ADDRESS_LINE2, tblAddress.ADDRESS_LINE3, 
    tblAddress.TOWN_OR_CITY, tblAddress.STATE, tblAddress.COUNTRY, 
    tblAddress.POSTAL_CODE, tblPeople.PHONE_NUMBER, 
    tblPeople.EFFECTIVE_START_DATE, tblPeople.EFFECTIVE_END_DATE, 
    tblLocation.LOC_CODE, 
    pp2.FIRST_NAME AS Expr1, pp2.LAST_NAME AS Expr2, 
    pp2.EMPLOYEE_NUMBER AS Expr3, tblAssignment.SUPERVISOR_ID, 
    tblAssignment.ATTRIBUTE2, tblAssignment.ATTRIBUTE3, 
    tblPeople.INSTANCE_ID, tblAssignment.LOC_ID
FROM
    tblPeople AS tblPeople 
RIGHT OUTER JOIN
    tblAddress AS tblAddress ON tblPeople.PERSON_ID = tblAddress.PERSON_ID 
                             AND tblPeople.INSTANCE_ID = tblAddress.INSTANCE_ID 
INNER JOIN
    tblAssignments AS tblAssignment ON tblPeople.PERSON_ID = tblAssignment.PERSON_ID 
                                    AND tblPeople.INSTANCE_ID = tblAssignment.INSTANCE_ID 
INNER JOIN
    Locations AS Location ON Location.LOC_ID = tblAssignment.LOC_ID
                          AND Location.INSTANCE_ID = tblAssignment.INSTANCE_ID 
INNER JOIN 
    tblPeople AS pp2 ON pp2.PERSON_ID = tblAssignment.SUPERVISOR_ID
                     AND pp2.INSTANCE_ID = tblAssignment.INSTANCE_ID
WHERE     
    tblPeople.EMPLOYEE_NUMBER = '3298'
    AND tblPeople.INSTANCE_ID = 1
    AND tblAssignment.Assignment_Status = 'Current'

1 Ответ

2 голосов
/ 13 октября 2010

Скорее всего, вам просто нужно изменить это JOIN

INNER JOIN 
    tblPeople AS pp2 ON pp2.PERSON_ID = tblAssignment.SUPERVISOR_ID
                     AND pp2.INSTANCE_ID = tblAssignment.INSTANCE_ID

на левое внешнее соединение

LEFT OUTER JOIN 
    tblPeople AS pp2 ON pp2.PERSON_ID = tblAssignment.SUPERVISOR_ID
                     AND pp2.INSTANCE_ID = tblAssignment.INSTANCE_ID

Если это SUPERVISOR_ID равно NULL, то столбцы из pp2 таблица будет NULL, но вы все равно должны получить данные для всех остальных столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...