好了,所以我有三個表, images(ID, name,..)
, tags(ID, name, ..)
和 一個與連接image_tags(imageID, tagID)
。不能想出一個好的SQL查詢
這是我的問題,我試圖編寫一個查詢,獲取所有具有特定標記ID的圖像+。
聽起來很簡單,所以我想。我知道我可以通過獲取所有帶有一個標籤的圖像來做到這一點,然後檢查所有圖像是否有其他標籤,但性能成本有點太高。
希望對此事有任何意見..
好了,所以我有三個表, images(ID, name,..)
, tags(ID, name, ..)
和 一個與連接image_tags(imageID, tagID)
。不能想出一個好的SQL查詢
這是我的問題,我試圖編寫一個查詢,獲取所有具有特定標記ID的圖像+。
聽起來很簡單,所以我想。我知道我可以通過獲取所有帶有一個標籤的圖像來做到這一點,然後檢查所有圖像是否有其他標籤,但性能成本有點太高。
希望對此事有任何意見..
試試這個
SELECT images.ID, COUNT(DISTINCT tags.ID) as counter FROM images
LEFT JOIN image_tags ON (images.ID=image_tags.imageID)
LEFT JOIN tags ON (image_tags.tagID=tags.ID)
GROUP BY images.ID HAVING COUNT (tags.ID) >=2
對不起,我似乎沒有足夠清楚我的問題,我想要得到的是具有特定tagID的所有圖像,如tagID = 1020和tagID = 1016不只是一個列出具有多於兩個標籤的所有圖像。 – ember
我想你想查詢的是:
SELECT images.ID, COUNT(DISTINCT tags.ID) as counter
FROM image_tags it
group by it.imageID
having max(case when it.tagID = 1020 then 1 else 0 end) = 1 and
max(case when it.tagID = 1016 then 1 else 0 end) = 1
該集團所有給定圖像標籤彙集。 having子句確保它有兩個你想要的標籤。如果你只想要這兩個標籤,那麼你可以加上一句:
max(case when it.tagID not in (1020, 1016) then 1 else 0 end) = 0
嗯,我使用一個連接時,我希望所有的只有一個標籤的圖像,但並不多工作.. – ember
發佈你的sql代碼,發佈結果,並告訴我們你得到的結果有什麼問題。 – BugFinder
看到這個問題:[**如何篩選具有多對多關係的SQL結果](http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a有很多通過關係) –