作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可能会遗漏一些明显的东西,但我需要一个查询,该查询仅返回与同一列上的多个条件匹配的记录。
该表是一个简单的链接表,它将标签链接到照片,即一个标签可以应用于多张照片,一张照片可以有多个标签。
photoid | tagid
----------------
343 | 2
343 | 5
343 | 8
522 | 5
522 | 1
522 | 10
522 | 8
118 | 8
118 | 5
etc...
正如所见,photoid 343 有 3 个标签。
现在,我需要一个查询,为我提供具有特定标签的所有照片的 photoid。照片应具有 tagid 1 或 tagid 2,并且应同时 tagid 5 和 tagid 8,但是tagid 不得为 10。 IE。就像是(tagid=1 OR tagid=2) AND (tagid=5 AND tagid=8) AND tagid!=10
。在上面的示例中,只有 343 会匹配。
我尝试过将 WHERE IN
与 GROUP BY
和 HAVING COUNT
SELECT PhotoTags.photoid, FROM PhotoTags
WHERE (PhotoTags.tagid) IN ((5),(8)) AND (PhotoTags.tagid) NOT IN (10)
GROUP BY PhotoTags.photoid
HAVING count(distinct PhotoTags.tagid)=2
这仅完成部分工作,它为我提供了与 tagid 5 和 8 匹配但不与 10 匹配的所有照片。如何将 AND (tagid=1 OR tagid=2)
标准添加到查询?
最佳答案
如果你这样做
WHERE (PhotoTags.tagid) IN ((5),(8)) AND (PhotoTags.tagid) NOT IN (10)
不会考虑此 AND,因为已经在检查 tagId 是 5 还是 8
AND (PhotoTags.tagid) NOT IN (10)
IN 只能用逗号分隔值,记住 AND 优先于 OR,尝试这个并检查它是否给出你想要的结果,它只会选择 5 或 8 或 1 或 2
SELECT PhotoTags.photoid, FROM PhotoTags
WHERE (PhotoTags.tagid) IN (5,8,1,2)
GROUP BY PhotoTags.photoid
HAVING count(distinct PhotoTags.tagid)=2
关于mysql - SELECT 匹配多个 WHERE 条件(来自链接表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42375157/
我是一名优秀的程序员,十分优秀!