gpt4 book ai didi

mysql - SELECT 匹配多个 WHERE 条件(来自链接表)

转载 作者:行者123 更新时间:2023-11-29 19:22:11 25 4
gpt4 key购买 nike

我可能会遗漏一些明显的东西,但我需要一个查询,该查询仅返回与同一列上的多个条件匹配的记录。

该表是一个简单的链接表,它将标签链接到照片,即一个标签可以应用于多张照片,一张照片可以有多个标签。

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 INGROUP BYHAVING 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com