好的,我有三张桌子,
images(ID, name,..)
,
tags(ID, name, ..)
和
一个连接image_tags(imageID, tagID)
。
这是我的问题,我正在尝试编写一个查询,以获取具有 2 + 特定标记ID的所有图片。
听起来很简单,所以我想。我知道我可以通过获取具有一个标签的所有图像然后检查所有图像是否具有其他图像,但是性能成本有点过高。
对此事的任何意见表示赞赏..
答案 0 :(得分:0)
试试这个
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
答案 1 :(得分:0)
我认为您想要的查询是:
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
答案 2 :(得分:-1)
这会对你有用吗?
SELECT * from image_tags i1, image_tags i2
WHERE i1.imageID = i2.imageID
AND i1.tagID != i2.tagID