2017-12-05 14 views
0
Table 1 : dbt_m_user (user_id, user_name, email_id, . . . . .) 

Table 2 : dbt_m_user_profile (user_id, profile_id, . . . . .) 

特定のプロファイル(役割)を持つユーザーの電子メールIDを持っています。 今、私は同じアクセスプロファイルを持っているユーザーのユーザー名が必要です。2つのテーブルから同じプロファイルのユーザーを照会するクエリ

私は下から結果を得ることができましたが、非常に生のように見え、エレガントではないように見えます。

select user_name from dbt_m_user where user_id in (
    select user_id from dbt_m_user_profile where profile_id in (
    select profile_id from dbt_m_user_profile where user_id in ( 
    select user_id from dbt_m_user where Email_Id = '[email protected]'))) 

これは特別な句/結合を使用して即興できますか?

+1

の下に試してみてください、それをテストしていません。 (フォーマットされていないテキストとして、画像ではありません) – jarlh

+3

あなたはMySQLまたはOracleを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

+1

user_idが探している値の場合は、外側の選択を省略できます。それは何も追加しません。 – Ronald

答えて

1

次のクエリは動作するはずです:

select t1.user_name 
from dbt_m_user_profile t1 
inner join dbt_m_user t2 
on t2.user_id = t1.user_id 
where t2.profile_id in (select t1.profile_id 
         from dbt_m_user_profile t1 
         inner join (select * from dbt_m_user 
            where t1.email_id = '[email protected]' 
           ) t2 
         on t2.user_id = t1.user_id       
         ) 
; 
+0

正常に動作していますか? –

0

をどのようにこの1については?私は

SELECT u.username 
    FROM dbt_m_user u 
    JOIN dbt_m_user_profile p 
     ON (u.user_id = p.user_id) 
    JOIN dbt_m_user_profile up 
     ON (p.profile_id = up.profile_id) 
    JOIN dbt_m_user ou 
     ON (up.user_id = ou.user_id) 
    WHERE ou.email_id = '[email protected]'; 
+0

私はユーザー名のリストが必要ですが、それはうまくいくとは思っていません。 –

+0

@SnehalMasne - それは気付かれませんでした。変更されたものはどうですか? – Ramesh

0

かかわらず、いくつかのサンプル・テーブル・データと予想される結果を追加クエリ

SELECT U.USER_NAME 
FROM  DBT_M_USER_PROFILE P, DBT_M_USER U 
WHERE  P.USER_ID = U.USER_ID 
AND  P.PROFILE_ID IN (
       SELECT P.PROFILE_ID 
       FROM DBT_M_USER_PROFILE P, DBT_M_USER U 
       WHERE U.EMAIL_ID = '[email protected]' 
       AND P.USER_ID = U.USER_ID ) 
+0

クエリは期待どおりに動作するはずですが、常にJOINにANSI構文を使用する方が良いです。詳細情報:https://stackoverflow.com/a/1018825/2225030 –

関連する問題