2016-11-30 41 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 | 

我試圖找到的所有標籤中的圖像common(image.id = 2)。如何加入在所有關係

如何在提供標籤ID 1,2和3時查詢它?

(對不起,壞的問題的標題)

回答

1

這裏有一個方法:

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 
+0

謝謝!假設標籤的數量是動態的,查詢也可以嗎? –

+0

@AronWoost。 。 。標籤來自* somewhere *,因此它取決於查詢的構造方式。 –

1

一種方式做到這一點上進行分組圖像標識和檢查標籤識別的所需數量。

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

謝謝!假設標籤的數量是動態的,查詢也可以嗎? –

+0

sure..maybe您可以將標記列表轉換爲mapping_table上的表和「join」。 –