gpt4 book ai didi

sql - 如何在多个连接行需要包含内容的情况下执行 SQL JOIN

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

当有人在我的网站上搜索具有多个标签的图像时,我需要查询并查找具有搜索标签的所有图像,但似乎无法弄清楚此查询。

我有一个Images表。

Images 表与 Posts_Images 有关系。

Posts_ImagesPosts 表有关系。

PostsPosts_Tags 表有关系。

Posts_Tags 表将与 Tags 表有关系。

到目前为止我的查询:

  SELECT "images".* FROM "images"
INNER JOIN "posts_images" ON posts_images.image_id = images.id
INNER JOIN "posts" ON posts.id = posts_images.post_id AND posts.state IS NULL
INNER JOIN "posts_tags" ON posts_tags.post_id = posts.id
INNER JOIN "tags" ON posts_tags.tag_id = tags.id
WHERE (("images"."order"=0) AND ("images"."has_processed"=TRUE)) AND (LOWER(tags.tag)='comic') AND ("tags"."tag" ILIKE '%Fallout%') ORDER BY "date_uploaded" DESC LIMIT 30

它没有得到任何结果,它正在检查tags是否等于两个值,但我想看看是否有任何加入的tags具有我的所有值需要。

所需的结果是任何具有与 ComicILIKE '%Fallout%' 匹配的标签的 Post

最佳答案

你似乎想要这样的东西:

SELECT i.*
FROM images JOIN
posts_images pi
ON pi.image_id = i.id JOIN
posts p
ON p.id = pi.post_id AND p.state IS NULL JOIN
posts_tags pt
ON pt.post_id = p.id JOIN
tags t
ON pt.tag_id = t.id
WHERE i."order" = 0 AND
i.has_processed AND
(LOWER(t.tag) = 'comic') OR
(t.tag ILIKE '%Fallout%')
GROUP BY i.id
HAVING COUNT(DISTINCT tag) >= 2
ORDER BY date_uploaded DESC
LIMIT 30;

逻辑位于HAVING 子句中。我不能 100% 确定这正是您想要的多场比赛。

关于sql - 如何在多个连接行需要包含内容的情况下执行 SQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798227/

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