gpt4 book ai didi

mysql - 在MYSQL中连接3个表并过滤

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

这是我的 previous question 的后续内容,但略有不同,值得提出自己的问题。

我有 3 个这样的表:

图像(约 10,000 行)

id | place_id | filename 
---|----------|----------
1 | 4 | abc.jpg
2 | 3 | def.jpg
3 | 4 | ghi.jpg
4 | 7 | jkl.jpg

标签(约 100 行)

id |   name   |
---|----------|
1 | tagA |
2 | tagB |
3 | tagC |
4 | tagD |

tagsToImages(约 30,000 行)

id |  tag_id  | image_id
---|----------|----------
1 | 1 | 4
2 | 3 | 2
3 | 2 | 4
4 | 1 | 1

作为示例,最后一个表显示 id = 1 的标签与 id = 4 的图像链接。

我想要做的是选择具有特定 place_id 的所有图像,并将每个图像与标签列表相关联,如下所示:

选择所有 place_id = 4 的内容,同时加入标签信息。

 filename |    tags    
-----------------------
abc.jpg | tagA
ghi.jpg | tagA, tagB

a1ex07 建议执行此操作的查询,看起来像这样:

SELECT i.filename, GROUP_CONCAT(t.name SEPARATOR ',') AS tags
FROM images i
INNER JOIN tagsToImages tti ON (tti.image_id = i.id)
INNER JOIN tags t ON (t.id = tti.tag_id)
WHERE i.place_id = 4 GROUP BY i.filename

这太棒了,而且效果非常好。我现在想做的是通过指定标签和位置来过滤该结果集。

我的尝试:

SELECT i.filename, GROUP_CONCAT(t.name SEPARATOR ',') AS tags
FROM images i
INNER JOIN tagsToImages tti ON (tti.image_id = i.id)
INNER JOIN tags t ON (t.id = tti.tag_id)
WHERE i.place_id = 4 AND t.id = 3 GROUP BY i.filename

几乎可以工作,但它只包含专门具有 id 为 3 的标签的图像,而不包含具有大量标签的图像,其中一个标签的 id 为 3。

谁能帮帮我吗?

最佳答案

尝试在 WHERE 子句中放置子查询来选择 tag_id 为 3 的任何图像例如

WHERE i.place_id = 4 AND i.imageID IN 
(
SELECT image_id
FROM tagsToImages
WHERE tag_id = 3
)

注意 - 还没有真正尝试过 - 这台电脑上没有可供测试的数据库。稍后查看并更新

关于mysql - 在MYSQL中连接3个表并过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128603/

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