2016-11-30 3 views
0

タグテーブル

| id | label | 
| 1 | test1 | 
| 2 | test2 | 
| 3 | test3 | 

画像テーブル

| id | data | 
| 1 | data1 | 
| 2 | data2 | 
| 3 | data3 | 

私はすべてのタグを持っている画像を見つけようとしている

| id | tagId | imageId | 
| 1 |  1 |  1 | 
| 2 |  1 |  2 | 
| 3 |  2 |  2 | 
| 4 |  3 |  2 | 
| 5 |  3 |  3 | 

マッピングテーブル共通(image.id = 2)。ALL関係におけるONに参加する方法

タグID 1,2,3が提供されている場合、どのようにクエリを実行しますか? IMAGEIDにグループ化し、TAGIDのに必要な数をチェックし、それを行うには

select m.imageId 
from mapping m 
where tagId in (1, 2, 3) 
group by m.imageId 
having count(*) = 3; -- needs to match the number of tags in the `where` clause 

答えて

1

ここでは一つの方法です。

select imageid 
from mapping_table 
group by imageid 
having count(distinct case when tagid in (1,2,3) then tagid end) = 3 
+0

ありがとうございます!タグの数が動的であるとします。これはクエリでも可能ですか? @AronWoost。 –

+0

。 。タグは* somewhere *から来ているので、クエリがどのように構築されているかによって異なります。 –

1

一つの方法:

は(悪い質問のタイトルのために申し訳ありませんが)

+0

ありがとう!タグの数が動的であるとします。これはクエリでも可能ですか? –

+0

確かに、タグのリストをテーブルに変換し、mapping_tableで 'join'することができます。 –

関連する問題