2016-09-27 21 views
0

私は6テーブルに参加する以下のようなクエリを持っています。条件に基づいてこのクエリに参加する方法は?

私はこの条件が満たされていない場合、すなわち空 (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行を返す場合、この行に

  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)) 

を1つの以上の条件を入れたい

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 

最初の行を取る。

どのように達成するには?

答えて

0

あなたはINNER JOINその後、TBL_NAFETHAH_USER_IDENTIFICATIONテーブルから BY便利ORDERで基準を満たす最初のレコードを返すサブクエリを欠落しているレコードを省略したい場合。その後、

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 BY便利ORDERで基準を満たす最初のレコードを返すサブクエリ。

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の最初の2つの値である場合、これは1または2の型がある場合は最初に来ることを保証します。タイプが0、-1、A、Bなどの場合は、別のサブクエリを使用して仮想ランク列を追加する必要があります。

関連する問題