2016-09-27 3 views
0

У меня есть запрос, как показано ниже, чтобы присоединиться к 6 таблице.Как присоединиться к этому запросу на основе условия?

select  usr.userid,usr.firstName,usr.middleName,usr.lastName,nuser.GRAND_FATHER_NAME,nco untry.NAME_AR,ncountry.NAME_EN,ncase.START_DATE 
from User_ usr 
inner join TBL_NAFETHAH_USER nuser 
On nuser.USER_ID = usr.userId 
inner join TBL_NAFETHAH_COUNTRY ncountry 
on nuser.NATIONALITY = ncountry.ID 
inner join TBL_NAFETHAH_CASE ncase 
on usr.userId = ncase.inmate_id 
inner join TBL_NAFETHAH_CASE_STATUS ncasestatus 
ON ncase.CASE_STATUS_ID = ncasestatus.CASE_STATUS_ID 
and ncasestatus.CASE_STATUS IN (1,2)) 
inner join TBL_NAFETHAH_CASE_STAGE ncasestage 
on ncasestage.CASE_STAGE_ID = ncase.CASE_STAGE_ID     
inner join TBL_NAFETHAH_USER_IDENTIFICATION uident 
on ((usr.userId = uident.USER_ID and uident.ID_TYPE = 1) or (usr.userId = uident.USER_ID and uident.ID_TYPE = 2)) 
inner join TBL_NAFETHAH_LOOKUP_VALUE nlookup 
on nlookup.LOOKUP_KEY = uident.ID_TYPE 
and nlookup.CATEGORY_ID = 9 
inner join TBL_NAFETHAH_LOOKUP_VALUE nlookup2 
on nlookup2.LOOKUP_KEY = ncasestage.CASE_STAGE 
and nlookup2.CATEGORY_ID = 15 
where nuser.MAKE_PUBLIC = 1 

Я хочу поставить еще одно условие в этой линии

  inner join TBL_NAFETHAH_USER_IDENTIFICATION uident on ((usr.userId = uident.USER_ID and uident.ID_TYPE = 1) or (usr.userId = uident.USER_ID and uident.ID_TYPE = 2)) 

Если это условие не встретил, то есть пустые (usr.userId = uident.USER_ID and uident.ID_TYPE = 1) or (usr.userId = uident.USER_ID and uident.ID_TYPE = 2) м, то я должен добавить еще одно условие (usr.userId = uident.USER_ID) и если он возвращает только Muliple строку возьмите первый ряд.

Как это достичь?

ответ

0

Если вы хотите исключить отсутствующие записи из таблицы TBL_NAFETHAH_USER_IDENTIFICATION затем INNER JOIN суб запроса, который возвращает первую запись, которая соответствует критериям с полезным ORDER BY.

inner join 
(
    SELECT TOP(1) * FROM TBL_NAFETHAH_USER_IDENTIFICATION uident 
    WHERE usr.userId = uident.USER_ID --AND ID_TYPE IN(1, 2) 
    ORDER BY ID_TYPE 
) 
uident ON usr.userId = uident.USER_ID 

Если вы хотите включить записи без матча из таблицы TBL_NAFETHAH_USER_IDENTIFICATION затем LEFT OUTER JOIN суб запроса, который возвращает первую запись, которая соответствует критериям с полезным ORDER BY.

left outer join 
(
    SELECT TOP(1) * FROM TBL_NAFETHAH_USER_IDENTIFICATION uident 
    WHERE usr.userId = uident.USER_ID ID_TYPE IN(1, 2) 
    ORDER BY <SomeValue> 
) 
uident ON 1=1 

ПРИМЕЧАНИЕ: Если всегда будет запись в TBL_NAFETHAH_USER_IDENTIFICATION для каждого пользователя, то вы можете заказать по ID_TYPE и взять первую строку. Если 1 и 2 являются первыми двумя значениями в ID_TYPE, это гарантирует, что если есть тип 1 или 2, то он будет первым. Если у вас есть тип 0, -1, A, B и т. Д., Вам придется добавить столбец виртуального ранга через другой подзапрос.

 Смежные вопросы

  • Нет связанных вопросов^_^