gpt4 book ai didi

SQL n 对 n 匹配多个值

转载 作者:行者123 更新时间:2023-12-04 14:52:53 25 4
gpt4 key购买 nike

我有一个将图像与标签匹配的 Web 应用程序,我需要创建一种动态优化标签搜索结果的方法。但是,我找不到一种干净的方法来进行 SQL 查询,这就是我需要您帮助的地方。

这个想法是,如果我搜索标签“clean”和“dog”,我将得到同时包含“clean”和“dog”标签的图像结果。如果我还包括标签“小”,我的结果将不得不缩小到具有三个相关标签的图像。

那么,拥有 N 对 N 的关系,这是正确的方法吗?

我的自然方法是生成这样的代码,但我当然不喜欢它的去向:

SELECT images.*
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tags.tag = @tag1
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag2
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag3
AND EXISTS (...)
...
)
)

当然,这不是很好。任何的想法?

谢谢!

最佳答案

类似的东西可以工作(我将 id 用于 SELECTGROUP BY ,使用您需要的列。

SELECT images.id
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tags.tag IN ( @tag1, @tag2, @tag3 )
GROUP BY images.id
HAVING COUNT(*) = @number_of_tags

如果您的示例中有 3 个标签,那么 number_of_tags必须是 3,连接将导致每个 id 有 3 行匹配。

您可以动态创建该查询,或者使用例如 10 个标签定义它并使用标签中不会出现的值初始化它们。

关于SQL n 对 n 匹配多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000567/

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