ПРАВИЛЬНОЕ СОЕДИНЕНИЕ НЕ ВОЗВРАЩАЕТСЯ НУЛЬ - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь получить значения NULL, используя ПРАВОЕ соединение. Например.

- T1 -

AppId   |  PhoneTypeID   | PhoneNumber
   10   |        1       | xxx-xxx-xxxx
   12   |        2       | xxx-xxx-xxxx
   13   |        3       | xxx-xxx-xxxx

- T2 -

   Id  | Description
   1   | Home
   2   | Work
   3   | Mobile

Я использую следующий запрос.

SELECT *
FROM T1
RIGHT OUTER JOIN T2 ON T1.PHONE_TYPE_ID = T2.Id AND T2.Id = 1

и ожидая

- T3 -

AppId  | PhoneTypeID  | PhoneNumber  | Id  | Description
   10  |       1      | xxx-xxx-xxxx | 1   | Home
   12  |    NULL      | NULL         | 1   | Home
   13  |    NULL      | NULL         | 1   | Home

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Ваш запрос не соответствует RIGHT JOIN .Вы всегда возвращаете AppId из T1 , но только несколько PhoneNumber из одной и той же таблицы, нет JOIN , которые вы собираетесь сделать, вы 'Вам понадобится условие ( CASE ).

Этот запрос, например, вернет точно ожидаемый результат:

select T1.AppId,
       case when T1.PhoneTypeID = T2.Id then T1.PhoneTypeID else null end as PhoneTypeID,
       case when T1.PhoneTypeID = T2.Id then T1.PhoneNumber else null end as PhoneNumber,
       T2.Id,
       T2.Description
from T1
     inner join T2 on T2.ID = 1
0 голосов
/ 18 июня 2019

Попробуйте, чтобы получить ожидаемый набор записей:

SELECT T1.AppId AS APP_ID
     , CASE WHEN T1.PhoneTYpeID = 1 THEN T1.PhoneTYpeId ELSE NULL END AS Phone_Type_Id
     , CASE WHEN T1.PhoneTYpeID = 1 THEN T1.PhoneNumber ELSE NULL END AS Phone_No
     , (SELECT Id FROM T2 WHERE Id = 1) AS T2_ID
     , (SELECT Description FROM T2 WHERE Id = 1) AS T2_DESCR
FROM T1

Я, хотя я не понимаю цели T3.Id и T3.Description?Спасибо

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