好的,所以我有三张表,
images(ID, name,..)
和
tags(ID, name, ..)
一张有连接的表image_tags(imageID, tagID)
。
这是我的问题,我正在尝试编写一个查询来获取所有具有2+特定标签 ID 的图像。
听起来很简单,或者我想。我知道我可以通过获取所有具有一个标签的图像来做到这一点,然后检查它们是否有其他标签,但是这样的性能成本有点太高了。
非常感谢您对此事的任何意见。
我认为你想要的查询是这样的:
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
group by 将给定图像的所有标签组合在一起。having 子句确保它具有您想要的两个标签。如果您只想要这两个标签,那么您可以添加子句:
max(case when it.tagID not in (1020, 1016) then 1 else 0 end) = 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
这对你有用吗?
SELECT * from image_tags i1, image_tags i2
WHERE i1.imageID = i2.imageID
AND i1.tagID != i2.tagID