0

好的,所以我有三张表, images(ID, name,..)tags(ID, name, ..)一张有连接的表image_tags(imageID, tagID)

这是我的问题,我正在尝试编写一个查询来获取所有具有2+特定标签 ID 的图像。

听起来很简单,或者我想。我知道我可以通过获取所有具有一个标签的图像来做到这一点,然后检查它们是否有其他标签,但是这样的性能成本有点太高了。

非常感谢您对此事的任何意见。

4

3 回答 3

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

group by 将给定图像的所有标签组合在一起。having 子句确保它具有您想要的两个标签。如果您想要这两个标签,那么您可以添加子句:

max(case when it.tagID not in (1020, 1016) then 1 else 0 end) = 0
于 2012-08-31T13:23:24.730 回答
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
于 2012-08-31T11:40:54.983 回答
-1

这对你有用吗?

SELECT * from image_tags i1, image_tags i2
WHERE i1.imageID = i2.imageID
AND i1.tagID != i2.tagID
于 2012-08-31T11:34:37.667 回答