我无法在任何地方找到这个,这是我的问题:
我有一个像' 1 2 3 4 5'然后我有一个包含列的mysql表,让我们称之为数字,如下所示:
numbers
1 2 6 8 9 14
3
1 5 3 6 9
7 8 9 23 44
10
我试图找到最简单的方法(希望在单个查询中)找到行,其中我的搜索字符串中的任何数字(1或2或3或4或5)都包含在数字列中。在给出示例中,我正在寻找1,2和3的行(因为它们与我的搜索字符串共享数字)。
我试图用一个查询来做这个,没有循环。
谢谢!
答案 0 :(得分:1)
最好的解决方案是删除包含值列表的列,并使用一个架构,其中每个值都在自己的行中。然后,您可以使用WHERE number IN (1, 2, 3, 4, 5)
并将其与包含其余数据的表连接。
但是,如果您无法更改架构,则可以使用regular expression。
SELECT *
FROM yourTable
WHERE numbers REGEXP '[[:<:]](1|2|3|4|5)[[:<:]]'
[[:<:]]
和[[:<:]]
匹配单词的开头和结尾。
请注意,如果表格很大,这种类型的搜索会非常慢,因为索引它是不可行的。
答案 1 :(得分:0)
创建一个函数,以便比较两个数组:= arrayIntersect(array1,array2)
SELECT numbers
FROM table
WHERE arrayIntersect(@argument, numbers)
两个带循环的函数定义和一个没有任何循环的单个查询
答案 2 :(得分:-1)
SELECT * FROM MyTable WHERE (numbers LIKE '%1%' OR numbers LIKE '%2%')
或者您也可以使用像this
这样的REGEXSELECT * FROM events WHERE id REGEXP '5587$'