2

表 1 - USERS:

user_id | email_id         | type
---------------------------------------
000121  | test_20@test.com | EXT
000125  | best_21@test.com | LOT
000128  | lite_21@test.com | EXT

表 2- HISTORY:

old_user_id | new_user_id | another_type
----------------------------------------
000128      | 000121      | INIT  

私が持っているemail_id場合、 1test_20@test.comを返す必要がある結合クエリを実行したいと思います.as TYPEのテーブルとasのテーブルにあります;user_email_idUSERSEXTHISTORYANOTHER_TYPEINIT

の単一の結合を持つクエリがありますold_user_id

IF EXISTS (SELECT 1 FROM   history cmr (nolock) 
                  INNER JOIN users au (nolock) 
                          ON au.user_id = cmr.old_user_id 
                  AND cmr.another_type = 'INIT  'AND au.type = 'EXT' 
                   AND au.email_id = 'test_20@test.com') 
  SELECT 1 ELSE   SELECT 0 

test_20@test.comまたはをクエリするとtest_20@test.com、1 が返されるはずです。また、 の結合条件を追加したいですnew_user_id

したがって、どちらかのユーザー (古いユーザーまたは新しいユーザー) が にいてEXT、にいる必要がありUSERSますINITHISTORY

前もって感謝します

4

3 に答える 3

4
IF EXISTS 
(
SELECT * FROM   history cmr 
Left JOIN users au  ON au.user_id = cmr.old_user_id  AND cmr.another_type = 'INIT  'AND au.type = 'EXT'  AND au.email_id = 'test_20@test.com' 
Left JOIN users au2  ON au2.user_id = cmr.new_user_id  AND cmr.another_type = 'INIT  'AND au2.type = 'EXT'  AND au2.email_id = 'test_20@test.com'
Where (au.user_id is NOT NULL) or (au2.user_id is NOT NULL)
)
SELECT 1 ELSE   SELECT 0 
于 2012-12-21T17:46:03.013 に答える
2

使用case when: BTWuserは予約済みのキーワードです。したがって、角括弧を使用することもできます。

クエリ 1:

SELECT case when 
       EXISTS (Select * From historyT cmr 
       Left Join userT au  
       On (au.user_id = cmr.old_user_id  
       And cmr.another_type = 'INIT'
       And au.type = 'EXT'  
       And au.email_id = 'test_20@test.com')) 
       Then 1
       Else 0
End  Status               
;

クエリ 2:

SELECT case when 
   EXISTS (Select * From historyT cmr 
   Left Join userT au  
   On (au.user_id = cmr.old_user_id  
   And cmr.another_type = 'INIT'
   And au.type = 'EXT'  
   And au.email_id = 'test_20@test.com') 
   Left Join userT au2  
   On (au2.user_id = cmr.new_user_id  
   And cmr.another_type = 'INIT' 
   And au2.type = 'EXT'  
   And au2.email_id = 'test_20@test.com'
   And (au.user_id is Not Null) 
   or (au2.user_id is Not Null)))
   Then 1
   Else 0

終了ステータス;

結果:

STATUS
1
于 2012-12-21T17:48:57.903 に答える