gpt4 book ai didi

sql - 在 MySQL 表中搜索包含 CSV 数据的列以查找输入值的存在

转载 作者:可可西里 更新时间:2023-11-01 07:12:12 26 4
gpt4 key购买 nike

我在 MySQL 中有一个表 ITEM,它存储的数据如下:

ID    FEATURES
--------------------
1 AB,CD,EF,XY
2 PQ,AC,A3,B3
3 AB,CDE
4 AB1,BC3
--------------------

作为输入,我将获得一个 CSV 字符串,例如“AB,PQ”。我想获取包含 AB 或 PQ 的记录。我意识到我们必须编写一个 MySQL 函数来实现这一点。所以,如果我们在 MySQL 中定义了这个神奇的函数 MATCH_ANY 来执行此操作,那么我将简单地执行一个 SQL,如下所示:

select * from ITEM where MATCH_ANY(FEAURES, "AB,PQ") = 0

上述查询将返回记录 1、2 和 3。

但是我在实现这个函数时遇到了各种各样的问题,因为我意识到 MySQL 不支持数组并且没有简单的方法可以根据分隔符拆分字符串。

改造 table 是我最后的选择,因为它涉及到很多问题。

我可能还想执行包含多个 MATCH_ANY 函数的查询,例如:

select * from ITEM where MATCH_ANY(FEATURES, "AB,PQ") = 0 and MATCH_ANY(FEATURES, "CDE")

在上面的例子中,我们会得到记录 (1, 2, 3) 和 (3) 的交集,也就是 3。

非常感谢任何帮助。

谢谢

最佳答案

首先,数据库当然不应包含逗号分隔值,但希望您已经意识到这一点。如果表格已规范化,您可以使用如下查询轻松获取项目:

select distinct i.Itemid
from Item i
inner join ItemFeature f on f.ItemId = i.ItemId
where f.Feature in ('AB', 'PQ')

您可以匹配逗号分隔值中的字符串,但效率不高:

select Id
from Item
where
instr(concat(',', Features, ','), ',AB,') <> 0 or
instr(concat(',', Features, ','), ',PQ,') <> 0

关于sql - 在 MySQL 表中搜索包含 CSV 数据的列以查找输入值的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2857024/

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