2017-05-31 50 views
0

我有3個表格用於存儲圖像,標籤和兩者之間的鏈接。該結構是這樣的:Mysql WHERE X匹配Y和Z

表 - 照片

pid  name 
-------------- 
1  image1 
2  image2 
3  image3 
4  image4 

表 - 標籤

tagID tagName 
--------------- 
1  red 
2  blue 
3  yellow 
4  green 

表 - photo_tag_bridge

pid  tagID 
------------- 
1  1 
2  1 
3  1 
1  2 
1  3 

我想創建一個SELECT語句檢索只'照片'中匹配多個'tagID'的行。我現在得到了這個嘗試,並帶回只是作爲此搜索它匹配標籤識別1和2

SELECT photos.pid 
, photo_tag_bridge.pid, photo_tag_bridge.tagID 
, tags.tagID 
FROM photos 
, photo_tag_bridge 
, tags 
where photos.pid = photo_tag_bridge.pid 
AND photo_tag_bridge.tagID = 1 
AND photo_tag_bridge.tagID = 2 
GROUP BY photos.pid 

這不會帶來任何東西,它似乎我可能需要使用一個INNER JOIN?

+0

選擇x *從X其中,n在( '一個', 'b')的基團通過具有XI計數(不同ñ )= 2 ...或類似的東西 – Strawberry

回答

1

有兩個明顯的解決方案。一是加入到photo_tag_bridge 2個實例(和標籤如果你使用的任何數據實際上是從這個表兩個實例):

SELECT photos.pid 
FROM photos 
, photo_tag_bridge ptb_a 
, photo_tag_bridge ptb_b 
WHERE photos.pid = ptb_a.pid 
AND photos.pid = ptb_b.pid 
AND ptb_a.tagID = 1 
AND ptb_b.tagID = 2 

或者你做一個彙總匹配重複計數到所需的數匹配(這是很方便進行匹配,例如,任何2 3的標籤):

SELECT photos.pid 
FROM photos 
, photo_tag_bridge ptb 
WHERE photos.pid = ptb_a.pid 
AND photos.pid = bptb_b.pid 
AND ptb.tagID IN (1,2) 
GROUP BY photos.pid 
HAVING COUNT(DISTINCT ptb.tagID)=2; 
0

至於我的理解,你需要得到具有多個標籤的照片ID。

create table #photo(id int,name varchar(10)) 
create table #phototag(pid int,tgid int) 
create table #tag(id int,name varchar(10)) 

select p.id,p.name from #photo p inner join #phototag pt on pt.pid=p.id group by p.id,p.name having count(*)>1 
相關問題