gpt4 book ai didi

mysql - 多个 AND 在同一个连接表列上

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

我有三个表格图像、image_tags 和 tags。 image 表包含图像信息,tags 包含标签信息,image_tags 包含图像和标签之间的关系,关系是多对多的。我想根据带有 AND 条件(不是 IN)的多个标签过滤图像。

我试过了:

SELECT images.* FROM images
LEFT JOIN image_tags ON image_tags.image_id = images.id
LEFT JOIN tags tag_0 ON image_tags.tag_id = tag_0.id
LEFT JOIN tags tag_1 ON image_tags.tag_id = tag_1.id
WHERE tag_0.tag = "tagme"
AND tag_1.tag = "excellent"
AND images.filesize > 0
GROUP BY images.id
ORDER BY images.posted DESC LIMIT 0, 40

SELECT images.* FROM images
LEFT JOIN image_tags ON image_tags.image_id = images.id
LEFT JOIN tags ON image_tags.tag_id = tags.id
WHERE tags.tag = "tagme"
AND tags.tag = "excellent"
AND images.filesize > 0
GROUP BY images.id
ORDER BY images.posted DESC LIMIT 0, 40

但没有任何效果它总是返回零结果,尽管它们存在。

最佳答案

您的第一个查询,即使它使用 LEFT 连接,也需要在 tags 中命中“tagme”“excellent”,因为条件在 where 子句中。将条件移动到 ON 子句中,如下所示:

SELECT images.* FROM images
LEFT JOIN image_tags ON image_tags.image_id = images.id
LEFT JOIN tags tag_0 ON image_tags.tag_id = tag_0.id AND tag_0.tag = 'tagme'
LEFT JOIN tags tag_1 ON image_tags.tag_id = tag_1.id AND tag_1.tag = 'excellent'
WHERE images.filesize > 0
GROUP BY images.id
ORDER BY images.posted DESC LIMIT 0, 40


你的第二个查询是错误的——它有一个不可能的条件:

WHERE tags.tag = "tagme"
AND tags.tag = "excellent"

tags.tag 不能同时“tagme”“excellent”。

关于mysql - 多个 AND 在同一个连接表列上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9655352/

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