27768


ceremonies_categoriesとusers_category（どちらとも中間テーブル）のcategory_idを見比べて、  
同じカテゴリを持っているceremony(式典)を取得するSQLをかきたいです。

・ceremonies_categories(式典が持つカテゴリ)  
・users_category（利用ユーザーが選択するカテゴリ）

【目的】  
利用ユーザーが興味を持つカテゴリを提示するためのSQL

【関係し得るテーブル】  
・ceremony  
・ceremonies_categories  
・user  
・category  
・users_category

【考案例】

[code]

    SELECT * from ceremonies WHERE EXISTS (SELECT * FROM users_categories WHERE users_categories.user_id = 1)
    
    SELECT * from ceremonies WHERE EXISTS (SELECT * FROM users_categories WHERE users_categories.category_id in ceremonies_categories.category_id)
    
[/code]

こういうSQLを考えましたが、よくわからなかったため質問しました。  
（1つめのSQL文はエラーなくいきましたが、これが正しいのかどうかよくわからず）  
（2つめのSQL文はEXISTの中で、IN句も使っており、アンチパターンな気がしまして。かといって解決策が思いつかず）

宜しくお願いします。


CC BY-SA 3.0
2016-07-20T15:42:22.087
27767
2016-07-20T16:54:08.670
13175
question
mysql sql
中間テーブル同士を比較して取得するSQL文をかきたいです。(IN句かEXISTを用いるのかとは思いますが)


カラム名がわからないのと、手元にデータがないのであてずっぽうですが、  
次のようなSQLになると思います。

例）ユーザID=1のユーザが、興味を持っているカテゴリの式典一覧

[code]

    SELECT ceremonies.*
      FROM ceremonies, ceremonies_categories, users_categories
     WHERE ceremonies.id = ceremonies_categories.ceremonies_id
       AND ceremonies_categories.category_id = users_categories.category_id
       AND users_categories.user_id = 1
    
[/code]


CC BY-SA 3.0
2016-07-20T16:54:08.670
27768
2016-07-20T16:54:08.670
15228
27767
answer