SQL-запрос - добавление результатов NULL в запрос SELECT - PullRequest
2 голосов
/ 07 февраля 2012

Я впервые использую переполнение стека, поэтому надеюсь, что задаю этот вопрос правильно.

У меня есть 2 SQL-запроса, которые я пытаюсь сравнить и идентифицировать отсутствующие значения, хотя у меня возникают проблемы с добавлением полей, которые имеют значение NULL, во второй запрос для идентификации отсутствующей информации. Я перечислю вопросы, а затем объясню, что я ищу.

Запрос № 1

SELECT C.CustomerId, C.CustomerName, C.StatusId
FROM Customer C
WHERE C.StatusId = 1
ORDER BY C.CustomerName

Запрос № 2

SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
    JOIN Identifier I ON I.CustomerId = C.CustomerId
WHERE C.StatusId = 1
    AND I.AuthorityId = 11
ORDER BY C.CustomerName

Первый запрос дает мне список клиентов, которые активны в нашей системе. Второй запрос дает мне список активных клиентов, у которых есть запись, где AuthorityId = 11.

Из моего списка активных клиентов (результаты запроса № 1) есть несколько клиентов, которые не отображаются в результатах моего второго запроса, поскольку у них нет записи в таблице идентификаторов, где AuthorityId = 11. Я хотел бы создать список, показывающий всех активных клиентов вместе с данными в столбце AuthorityId, но если у активного клиента нет записи в таблице идентификаторов, где AuthorityId = 11, я бы хотел сказать NULL, чтобы я мог очистить недостающие данные.

Надеюсь, это ясно из того, что я ищу.

Заранее спасибо за помощь!

Ответы [ 3 ]

2 голосов
/ 07 февраля 2012

Попробуйте:

SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
LEFT JOIN Identifier I ON I.CustomerId = C.CustomerId and I.AuthorityId = 11
WHERE C.StatusId = 1
ORDER BY C.CustomerName
1 голос
/ 07 февраля 2012

просто изменить JOIN на LEFT JOIN

SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
    LEFT JOIN Identifier I ON I.CustomerId = C.CustomerId
WHERE C.StatusId = 1
    AND I.AuthorityId = 11
ORDER BY C.CustomerName

UPDATE

если вы хотите изменить значение (NULL) на NULL или любое другое слово, которое хотите заменить, вы можете COALESCE

SELECT C.CustomerId, C.CustomerName, C.StatusId, COALESCE(I.AuthorityId, 'whatever')
FROM Customer C
    LEFT JOIN Identifier I ON I.CustomerId = C.CustomerId
WHERE C.StatusId = 1
    AND I.AuthorityId = 11
ORDER BY C.CustomerName
0 голосов
/ 07 февраля 2012
SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
    LEFT OUTER JOIN Identifier I ON 
    (I.CustomerId = C.CustomerId) 
    AND (I.AuthorityId = 11)
WHERE  (C.StatusId = 1)
ORDER BY C.CustomerName

Левое внешнее соединение или левое соединение - вот что вам нужно.

...