2016-09-27 35 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等,則必須通過另一個子查詢添加虛擬排名列。