2017-11-09 3 views
0

上の2つの異なるデータセットをテスト・ジョインと選択しますのは、私はUsersテーブルがあるとしましょう私は、ユーザーが持っていると、多くの「活動」に所属し、そしてそれらの活動がACTIVITY_TYPEによってグループ化されているデータベースを持っている同じ列

users 
------- 
id 
name 
..... 

および活動テーブル及びタイプ

activities 
---------- 
id 
name 
activity_type_id 

activity_types 
-------------- 
id 
name 

とテーブルを結合する

activities_users 
------------------ 
user_id 
activity_id 

そこで質問です:

私はACTIVITY_TYPE IDS 5と7を持っている、と誰がユーザーをもたらすクエリを作成する必要がある場合タイプ5およびタイプ7の活動中であった。

どのようにしてt彼の質問は達成されるだろうか?

SELECT users.id, users.name, users.email, users.phone FROM users 
JOIN activities_users ON (
    users.id = activities_users.user_id AND 
    (
    activities_users.activity_id IN (SELECT activities.id FROM activities where activities.activity_type_id IN (5)) 
    AND 
    activities_users.activity_id IN (SELECT activities.id FROM activities where activities.activity_type_id IN (7)) 
) 
); 

をしかし、第5行にACTIVITY_IDが同時に1つのデータセットと他のになることはありませんので、私は空のセットを持つことになります実現:

はこれをしようとしました。

おはようございます!

答えて

0

は、まあ私は私がしなければならなかったと思う二つの異なる別の名前で毎回のテーブルを結合するエイリアシングのJOIN:

SELECT users.id, users.name, users.email, users.phone FROM users 
JOIN activities_users AS au1 ON (
    users.id = au1.user_id 
    AND au1.activity_id IN (SELECT activities.id FROM activities where activities.activity_type_id IN (5)) 
) 
JOIN activities_users AS au2 ON (
    users.id = au2.user_id 
    AND au2.activity_id IN (SELECT activities.id FROM activities where activities.activity_type_id IN (7)) 
) 
group by users.id; 

より最適な答えはまだとにかく感謝しています!

0
SELECT * 
    FROM users 
WHERE EXISTS 
      (SELECT NULL 
       FROM activity_types 
        INNER JOIN activities ON activities.activity_type_id = activity_types.id 
        INNER JOIN activities_users ON activities_users.activity_id = activities.id 
      WHERE activity_types.id IN (5, 7) 
       AND activity_users.user_id = users.id) 
関連する問題