我有下一个数据库
| ID | numbers |
|--------|------------|
| 1 | 1,2,3 |
| 2 | 4,5,6 |
| 3 | 2,3,4 |
要检索numbers
包含给定数字的所有行很简单:
SELECT * FROM mydb WHERE FIND_IN_SET(3, numbers)
返回第1行和第3行
但是现在我想传递一个数组/数字集,并希望检索numbers
中至少有一个数字出现的所有条目,即两个集合的交集不为空
类似的东西:
SELECT * FROM mydb WHERE SET_INTERSECT('2,4', numbers)!=NULL
这应返回所有行,因为每行包含2和/或4。
以上不起作用。这在mysql中是否可行?
谢谢!
答案 0 :(得分:4)
为什么不使用OR?
SELECT * FROM mydb WHERE FIND_IN_SET(2, numbers) or FIND_IN_SET(4, numbers)
答案 1 :(得分:1)
如果将表格结构更改为:
ID | NUMBERS
1 | 1
1 | 2
1 | 3
2 | 4
2 | 5
...
SELECT DISTINCT id FROM table WHERE numbers = 2 OR numbers = 4
/*or...*/
/*WHERE numbers IN (2, 4)*/